Accidentalidad en Medellín

Este documento tiene la finalidad de describir el primer intento en cuanto a la agrupación y el modelamiento del proyecto final de la materia de analítica predictiva.

Agrupamiento

La primera tarea que se realizará es el agrupamiento de barrios por estadísticas de accidentes en Medellín en los últimos años. Ya que la idea es ver el comportamiento de la accidentalidad en los barrios en los últimos años, el primer intento será realizado por año y después se verá el promedio para cada barrio.

Para realizar esto cargamos los datos y hacemos un breve análisis descriptivio para ver las variables de interés.

accidentes <- read.csv("D:/jhoparra/2020-1/Predictiva/analitica_predictiva/accidentes3.csv",fileEncoding = "ISO-8859-1")
head(accidentes)
##   OBJECTID RADICADO      FECHA     HORA DIA PERIODO     CLASE         DIRECCION
## 1   549556  1611786 2018-01-02 03:18:00   2    2018 Atropello CR 64 C CL 103 GG
## 2   549558  1611859 2018-01-02 05:10:00   2    2018    Choque       CR 75 CL 59
## 3   549559  1611705 2018-01-02 05:26:00   2    2018      Otro     CR 43 A CL 17
## 4   549560  1611750 2018-01-02 05:45:00   2    2018    Choque       CR 55 CL 37
## 5   549561  1611719 2018-01-02 06:00:00   2    2018      Otro    CR 64 C CL 104
## 6   549562  1611723 2018-01-02 06:30:00   2    2018      Otro       CL 65 CR 87
##                  DIRECCION_ENC CBML                        TIPO_GEOCOD
## 1 CR  064 C   103 GG 000 00000 0509 Malla vial aproximada: CR 64C-103F
## 2     CR  075   059  000 00000 0703    Malla vial aproximada: CR 76-60
## 3   CR  043 A   017  000 00000 1404                         Malla vial
## 4     CR  055   037  000 00000 1011                         Malla vial
## 5   CR  064 C   104  000 00000 0502                         Malla vial
## 6     CL  065   087  000 00000 0717                         Malla vial
##     GRAVEDAD      BARRIO        COMUNA        DISENO DIA_NOMBRE MES MES_NOMBRE
## 1     MUERTO    Girardot      Castilla  Tramo de via     MARTES   1      enero
## 2 SOLO DAÑOS  San Germán       Robledo  Tramo de via     MARTES   1      enero
## 3     HERIDO   Castropol    El Poblado Lote o Predio     MARTES   1      enero
## 4     HERIDO Calle Nueva La Candelaria  Tramo de via     MARTES   1      enero
## 5     HERIDO  Las Brisas      Castilla  Tramo de via     MARTES   1      enero
## 6     HERIDO     Robledo       Robledo Lote o Predio     MARTES   1      enero
##   X_MAGNAMED Y_MAGNAMED  LONGITUD  LATITUD
## 1   835295.9    1188611 -75.56563 6.299676
## 2   832480.2    1185168 -75.59107 6.268543
## 3   834854.0    1179698 -75.56963 6.219092
## 4   834206.8    1182011 -75.57547 6.240001
## 5   835497.3    1188801 -75.56381 6.301392
## 6   831814.6    1186036 -75.59709 6.276391
summary(accidentes)
##     OBJECTID         RADICADO            FECHA               HORA          
##  Min.   :     1   Min.   :0.000e+00   Length:209438      Length:209438     
##  1st Qu.:222812   1st Qu.:1.482e+06   Class :character   Class :character  
##  Median :318870   Median :1.541e+06   Mode  :character   Mode  :character  
##  Mean   :341181   Mean   :8.693e+15                                        
##  3rd Qu.:536608   3rd Qu.:1.599e+06                                        
##  Max.   :686845   Max.   :5.002e+20                                        
##       DIA           PERIODO        CLASE            DIRECCION        
##  Min.   : 1.00   Min.   :2014   Length:209438      Length:209438     
##  1st Qu.: 8.00   1st Qu.:2015   Class :character   Class :character  
##  Median :16.00   Median :2016   Mode  :character   Mode  :character  
##  Mean   :15.71   Mean   :2016                                        
##  3rd Qu.:23.00   3rd Qu.:2017                                        
##  Max.   :31.00   Max.   :2018                                        
##  DIRECCION_ENC          CBML           TIPO_GEOCOD          GRAVEDAD        
##  Length:209438      Length:209438      Length:209438      Length:209438     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     BARRIO             COMUNA             DISENO           DIA_NOMBRE       
##  Length:209438      Length:209438      Length:209438      Length:209438     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##       MES          MES_NOMBRE          X_MAGNAMED       Y_MAGNAMED     
##  Min.   : 1.000   Length:209438      Min.   :820001   Min.   :1172269  
##  1st Qu.: 4.000   Class :character   1st Qu.:832958   1st Qu.:1181228  
##  Median : 7.000   Mode  :character   Median :834286   Median :1183176  
##  Mean   : 6.588                      Mean   :834059   Mean   :1183210  
##  3rd Qu.:10.000                      3rd Qu.:835344   3rd Qu.:1185499  
##  Max.   :12.000                      Max.   :845503   Max.   :1193451  
##     LONGITUD         LATITUD     
##  Min.   :-75.70   Min.   :6.152  
##  1st Qu.:-75.59   1st Qu.:6.233  
##  Median :-75.57   Median :6.251  
##  Mean   :-75.58   Mean   :6.251  
##  3rd Qu.:-75.57   3rd Qu.:6.272  
##  Max.   :-75.47   Max.   :6.343
table(accidentes$GRAVEDAD)
## 
##     HERIDO     MUERTO SOLO DAÑOS 
##     114201       1264      93973
table(accidentes$CLASE)
## 
##                             Atropello     Caida ocupante             Choque 
##                  6              20679              18578             141447 
## Choque y Atropello           Incendio               Otro        Volcamiento 
##                  1                 24              22066               6637

Dado que la clase del accidente puede proveer con estadísticas importantes para realizar el agrupamiento de barrios vamos a unificar para tener categorías con una cantidad importante de registros. Por esta razón los que están en blanco y en incendio serán agregadas a Otro, en tanto que choque y atropello se agregará a los datos de choque.

accidentes <- accidentes %>%
  rename(BARRIO_1 = BARRIO)
accidentes$CLASE <- gsub("Incendio","Otro",accidentes$CLASE)
accidentes$CLASE <- gsub("Choque y Atropello","Choque",accidentes$CLASE)
accidentes$CLASE[accidentes$CLASE == ""] <- "Otro"
table(accidentes$CLASE)
## 
##      Atropello Caida ocupante         Choque           Otro    Volcamiento 
##          20679          18578         141448          22096           6637

Con esta información es necesario idear algunos indicadores que más allá de sus valores aporten información y sean útiles para la intervención de la accidentalidad. En un principio se pueden establecer indicadores para cada una de las categorías de la clase de accidente así como la gravedad de los mismos y la población de cada barrio.

Hasta el momento los indicadores definidos para el agrupamiento son:

  1. Accidentes con atropello.
  1. Heridos.
  2. Muertos.
  3. Solo daños.
  1. Accidente de choque.
  1. Heridos.
  2. Muertos.
  3. Solo daños.
  1. Accidente de caida ocupante.
  1. Heridos.
  2. Muertos.
  3. Solo daños.
  1. Accidente de volcamiento.
  1. Heridos.
  2. Muertos.
  3. Solo daños.
  1. Otro tipo de accidentes.
  1. Heridos.
  2. Muertos.
  3. Solo daños.

Se puede evaluar incluir indicadores que relacionen la hora de los accidentes (como variable discretizada) y el clima.

Ya que existen algunos datos faltantes para el tema de los barrios procederemos a asignarle su respectivo barrio de acuerdo a sus coordenadas. Para esto leemos el archivo geoJson que contiene los polígonos de los barrios de Medellín. Este procedimiento es igualmente válido para poder graficar el mapa adecuadamente con los resultados del clustering.

La información de este geojson fue descargada de este portal.

Sys.setlocale(locale = "Spanish")
## [1] "LC_COLLATE=Spanish_Spain.1252;LC_CTYPE=Spanish_Spain.1252;LC_MONETARY=Spanish_Spain.1252;LC_NUMERIC=C;LC_TIME=Spanish_Spain.1252"
barrios_medellin <- readOGR("D:/jhoparra/2020-1/Predictiva/analitica_predictiva/Mapa/Limite_Barrio_Vereda_Catastral.geojson",
                            stringsAsFactors = FALSE,use_iconv = TRUE,encoding = "UTF-8")
## OGR data source with driver: GeoJSON 
## Source: "D:\jhoparra\2020-1\Predictiva\analitica_predictiva\Mapa\Limite_Barrio_Vereda_Catastral.geojson", layer: "Limite_Barrio_Vereda_Catastral"
## with 354 features
## It has 8 fields
head(barrios_medellin@data)
##   OBJECTID SHAPEAREA SHAPELEN COMUNA BARRIO CODIGO
## 0      216  156495.4 1853.819     13     08   1308
## 1      217  401784.3 4554.704     70     97   7097
## 2      218  945028.4 5484.487     14     10   1410
## 3      219  190292.6 2801.320     03     10   0310
## 4      220  748198.6 4493.622     60     97   6097
## 5      221  546274.6 3275.185     14     23   1423
##                         NOMBRE_BARRIO NOMBRE_COMUNA
## 0                     San Javier No.2    SAN JAVIER
## 1      Area De Expansion Belen Rincon     ALTAVISTA
## 2                        Los Naranjos    EL POBLADO
## 3                     Versalles No. 2      MANRIQUE
## 4 Area de Expansion Altos de Calasanz SAN CRISTOBAL
## 5          Santa María de los Ángeles    EL POBLADO

Para realizar este proceso es necesario que los puntos provenientes de la accidentalidad se encuentren en la misma proyección de los polígonos.

accidentes_spatial <- accidentes
coordinates(accidentes_spatial) <- ~LONGITUD+LATITUD
proj4string(accidentes_spatial) <- proj4string(barrios_medellin)
## Warning in proj4string(barrios_medellin): CRS object has comment, which is lost
## in output

Ahora utilizamos la función over de la librería sp para determinar los poligonos en los que se encuentra cada punto, este proceso nos ayudará para dejar los nombres de los barrios estándar para hacer el mapa más adelante.

## Código para determinar en cuáles barrios se encuentran los puntos
contains_barrio <- over(accidentes_spatial, barrios_medellin)

Con esta información ahora añadimos la información del geojson al data frame para poder identificar los puntos que se encuentran sin barrio.

accidentes <- cbind(accidentes,contains_barrio)
head(accidentes)
##   OBJECTID RADICADO      FECHA     HORA DIA PERIODO     CLASE         DIRECCION
## 1   549556  1611786 2018-01-02 03:18:00   2    2018 Atropello CR 64 C CL 103 GG
## 2   549558  1611859 2018-01-02 05:10:00   2    2018    Choque       CR 75 CL 59
## 3   549559  1611705 2018-01-02 05:26:00   2    2018      Otro     CR 43 A CL 17
## 4   549560  1611750 2018-01-02 05:45:00   2    2018    Choque       CR 55 CL 37
## 5   549561  1611719 2018-01-02 06:00:00   2    2018      Otro    CR 64 C CL 104
## 6   549562  1611723 2018-01-02 06:30:00   2    2018      Otro       CL 65 CR 87
##                  DIRECCION_ENC CBML                        TIPO_GEOCOD
## 1 CR  064 C   103 GG 000 00000 0509 Malla vial aproximada: CR 64C-103F
## 2     CR  075   059  000 00000 0703    Malla vial aproximada: CR 76-60
## 3   CR  043 A   017  000 00000 1404                         Malla vial
## 4     CR  055   037  000 00000 1011                         Malla vial
## 5   CR  064 C   104  000 00000 0502                         Malla vial
## 6     CL  065   087  000 00000 0717                         Malla vial
##     GRAVEDAD    BARRIO_1        COMUNA        DISENO DIA_NOMBRE MES MES_NOMBRE
## 1     MUERTO    Girardot      Castilla  Tramo de via     MARTES   1      enero
## 2 SOLO DAÑOS  San Germán       Robledo  Tramo de via     MARTES   1      enero
## 3     HERIDO   Castropol    El Poblado Lote o Predio     MARTES   1      enero
## 4     HERIDO Calle Nueva La Candelaria  Tramo de via     MARTES   1      enero
## 5     HERIDO  Las Brisas      Castilla  Tramo de via     MARTES   1      enero
## 6     HERIDO     Robledo       Robledo Lote o Predio     MARTES   1      enero
##   X_MAGNAMED Y_MAGNAMED  LONGITUD  LATITUD OBJECTID SHAPEAREA SHAPELEN COMUNA
## 1   835295.9    1188611 -75.56563 6.299676      223  501749.3 3631.300     05
## 2   832480.2    1185168 -75.59107 6.268543      203  429861.9 3759.495     07
## 3   834854.0    1179698 -75.56963 6.219092      335  605804.3 3991.769     14
## 4   834206.8    1182011 -75.57547 6.240001      273  314207.5 2513.434     10
## 5   835497.3    1188801 -75.56381 6.301392      190  350644.3 2596.574     05
## 6   831814.6    1186036 -75.59709 6.276391      229  479641.0 3753.257     07
##   BARRIO CODIGO   NOMBRE_BARRIO NOMBRE_COMUNA
## 1     09   0509        Girardot      CASTILLA
## 2     03   0703      San Germán       ROBLEDO
## 3     04   1404       Castropol    EL POBLADO
## 4     09   1009    La Alpujarra LA CANDELARIA
## 5     06   0506 Plaza de Ferias      CASTILLA
## 6     17   0717         Robledo       ROBLEDO
table(is.na(accidentes$NOMBRE_BARRIO))
## 
##  FALSE   TRUE 
## 208923    515

Siguen existiendo 515 registros con valores faltantes.

accidentes_na <- accidentes[is.na(accidentes$NOMBRE_BARRIO),]

Viendo los registros y analizándolos podemos ver que estos registros se encuentran por fuera de lo que se considera Medellín de acuerdo a las delimitaciones encontradas en el geojson de la alcaldía, por esta razón se eliminarán del conjunto de datos.

accidentes <- accidentes[!is.na(accidentes$NOMBRE_BARRIO),]
table(is.na(accidentes$NOMBRE_BARRIO))
## 
##  FALSE 
## 208923

Ahora con estos datos podemos proceder a realizar mapas y hacer el análisis por clustering. Para eso vamos a realizar un ejemplo simple con el número total de accidentes.

## Obtener indicador de cantidad de accidentes por barrio en total
barrios_ejemplo <- accidentes %>%
  select(NOMBRE_BARRIO) %>%
  group_by(NOMBRE_BARRIO) %>%
  summarize(conteo = n())
## `summarise()` ungrouping output (override with `.groups` argument)
head(barrios_ejemplo)
## # A tibble: 6 x 2
##   NOMBRE_BARRIO        conteo
##   <chr>                 <int>
## 1 Aguas Frias              63
## 2 Aldea Pablo VI           36
## 3 Alejandría              428
## 4 Alejandro Echavarría    773
## 5 Alfonso López          1239
## 6 Altamira                720
## Copia del spatial data frame
barrios_med_ejemplo <- barrios_medellin

## Sacar index para organizar luego los registros
barrios_med_ejemplo@data$index <- as.integer(row.names(barrios_med_ejemplo@data))

## Combinar el indicador con el data frame spatial para graficar en mapa
barrios_med_ejemplo@data <- merge(barrios_med_ejemplo@data,barrios_ejemplo,by = "NOMBRE_BARRIO",all.x=TRUE)
barrios_med_ejemplo@data <- barrios_med_ejemplo@data %>% arrange(index)
barrios_med_ejemplo@data$conteo[is.na(barrios_med_ejemplo@data$conteo)] <- 0

Mapa

labels <- sprintf(
  "<strong>%s</strong><br/>%g accidentes en total",
  barrios_med_ejemplo@data$NOMBRE_BARRIO, barrios_med_ejemplo@data$conteo
) %>% lapply(htmltools::HTML)

pal <- colorNumeric("YlOrRd", NULL)

leaflet(barrios_med_ejemplo)%>% 
  addTiles()  %>% 
  setView(lat=6.247612, lng=-75.582932, zoom=11.5) %>%
  addPolygons(color="grey",weight = 1, fillOpacity = 0.75,opacity = 1, smoothFactor = 0.7, fillColor = ~pal(conteo),
  highlight = highlightOptions(
    weight = 3,
    color = "#666",
    fillOpacity = 0.8,
    bringToFront = TRUE),
  label = labels,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = pal, values = ~conteo, opacity = 0.7, title = "Cant. accidentes",
            position = "topright")

Listo este mapa y este código será importante para varias partes de la aplicación de Shiny final y por esa razón también dejaremos el análisis para e clustering que realizaremos a continuación. Sin embargo se puede ver que la mayor cantidad de accidentes se dan en barrios cercanos a las vías principales de la ciudad como la autopista regional.

1. Enfoque con variables de conteo

El primer enfoque que se aborda es usando las variables con el conteo de cada indicador definido en la sección anterior, por lo cual los datos de cada barrio estarán en distintas escalas es decir, los barrios que tengan más flujo vehicular puede que tengan mayor cantidad de accidentes comparados con barrios con pocas vías o poco flujo vehicular.

## Miramos la cantidad de accidentes por combinación de barrio, gravedad y clase de accidente
barrios_conteo <- accidentes %>%
  select(NOMBRE_BARRIO,GRAVEDAD,CLASE) %>%
  group_by(NOMBRE_BARRIO,GRAVEDAD,CLASE) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO', 'GRAVEDAD' (override with `.groups` argument)
head(barrios_conteo)
## # A tibble: 6 x 4
## # Groups:   NOMBRE_BARRIO, GRAVEDAD [2]
##   NOMBRE_BARRIO GRAVEDAD   CLASE          conteo
##   <chr>         <chr>      <chr>           <int>
## 1 Aguas Frias   HERIDO     Atropello          16
## 2 Aguas Frias   HERIDO     Caida ocupante     11
## 3 Aguas Frias   HERIDO     Choque             11
## 4 Aguas Frias   HERIDO     Otro               12
## 5 Aguas Frias   HERIDO     Volcamiento         3
## 6 Aguas Frias   SOLO DAÑOS Choque             10
## Ahora convertimos este data frame de formato narrow a formato wide
barrios_conteo <- barrios_conteo %>%
  mutate(indicador = paste(CLASE,GRAVEDAD,sep="_"))
barrios_conteo <- barrios_conteo[,c("NOMBRE_BARRIO","indicador","conteo")]
head(barrios_conteo)
## # A tibble: 6 x 3
## # Groups:   NOMBRE_BARRIO [1]
##   NOMBRE_BARRIO indicador             conteo
##   <chr>         <chr>                  <int>
## 1 Aguas Frias   Atropello_HERIDO          16
## 2 Aguas Frias   Caida ocupante_HERIDO     11
## 3 Aguas Frias   Choque_HERIDO             11
## 4 Aguas Frias   Otro_HERIDO               12
## 5 Aguas Frias   Volcamiento_HERIDO         3
## 6 Aguas Frias   Choque_SOLO DAÑOS         10
barrios_conteo_indic <- barrios_conteo %>%
  pivot_wider(values_from="conteo",names_from="indicador",values_fill = 0)
head(barrios_conteo_indic)
## # A tibble: 6 x 14
## # Groups:   NOMBRE_BARRIO [6]
##   NOMBRE_BARRIO Atropello_HERIDO `Caida ocupante~ Choque_HERIDO Otro_HERIDO
##   <chr>                    <int>            <int>         <int>       <int>
## 1 Aguas Frias                 16               11            11          12
## 2 Aldea Pablo ~               11                6             5           3
## 3 Alejandría                  15               16            78          18
## 4 Alejandro Ec~               85               74           200         110
## 5 Alfonso López              141              188           262         191
## 6 Altamira                    47              103           184          90
## # ... with 9 more variables: Volcamiento_HERIDO <int>, `Choque_SOLO
## #   DAÑOS` <int>, `Otro_SOLO DAÑOS` <int>, Choque_MUERTO <int>,
## #   Atropello_MUERTO <int>, `Volcamiento_SOLO DAÑOS` <int>, `Caida
## #   ocupante_MUERTO` <int>, Otro_MUERTO <int>, Volcamiento_MUERTO <int>
barrios_conteo_indic <- as.data.frame(barrios_conteo_indic)
row.names(barrios_conteo_indic) <- barrios_conteo_indic$NOMBRE_BARRIO
barrios_conteo_indic <- barrios_conteo_indic[,-1]
head(barrios_conteo_indic)
##                      Atropello_HERIDO Caida ocupante_HERIDO Choque_HERIDO
## Aguas Frias                        16                    11            11
## Aldea Pablo VI                     11                     6             5
## Alejandría                         15                    16            78
## Alejandro Echavarría               85                    74           200
## Alfonso López                     141                   188           262
## Altamira                           47                   103           184
##                      Otro_HERIDO Volcamiento_HERIDO Choque_SOLO DAÑOS
## Aguas Frias                   12                  3                10
## Aldea Pablo VI                 3                  1                 9
## Alejandría                    18                  9               289
## Alejandro Echavarría         110                 46               254
## Alfonso López                191                 50               397
## Altamira                      90                 21               272
##                      Otro_SOLO DAÑOS Choque_MUERTO Atropello_MUERTO
## Aguas Frias                        0             0                0
## Aldea Pablo VI                     1             0                0
## Alejandría                         2             1                0
## Alejandro Echavarría               0             2                2
## Alfonso López                      2             3                4
## Altamira                           1             0                0
##                      Volcamiento_SOLO DAÑOS Caida ocupante_MUERTO Otro_MUERTO
## Aguas Frias                               0                     0           0
## Aldea Pablo VI                            0                     0           0
## Alejandría                                0                     0           0
## Alejandro Echavarría                      0                     0           0
## Alfonso López                             1                     0           0
## Altamira                                  0                     1           1
##                      Volcamiento_MUERTO
## Aguas Frias                           0
## Aldea Pablo VI                        0
## Alejandría                            0
## Alejandro Echavarría                  0
## Alfonso López                         0
## Altamira                              0

Con este data frame podemos proceder a realizar el agrupamiento por hierarchical clustering para obtener una idea de la cantidad de clústers con los que trabajaremos en K-means. Adicional a este último método, utilizaremos DBSCAN para comparar los resultados obtenidos. Primero, vamos a escalar los datos de cada una de las variables para que ninguna variable tena más peso que las demás.

## Escalar datos
barrios_centrados <- scale(barrios_conteo_indic,center = TRUE,scale = TRUE)

## Extraer datos de media y desviación estándar para poder reversar la operación más adelante
print("Media:")
## [1] "Media:"
(media <- attr(barrios_centrados,"scaled:center"))
##       Atropello_HERIDO  Caida ocupante_HERIDO          Choque_HERIDO 
##            65.00000000            59.96103896           153.78571429 
##            Otro_HERIDO     Volcamiento_HERIDO      Choque_SOLO DAÑOS 
##            70.33766234            20.84740260           302.50649351 
##        Otro_SOLO DAÑOS          Choque_MUERTO       Atropello_MUERTO 
##             1.19805195             1.79870130             2.04870130 
## Volcamiento_SOLO DAÑOS  Caida ocupante_MUERTO            Otro_MUERTO 
##             0.61363636             0.19480519             0.01948052 
##     Volcamiento_MUERTO 
##             0.00974026
print("Desviación estándar:")
## [1] "Desviación estándar:"
(desv_est <- attr(barrios_centrados,"scaled:scale"))
##       Atropello_HERIDO  Caida ocupante_HERIDO          Choque_HERIDO 
##            80.93158731            64.38568469           188.88751851 
##            Otro_HERIDO     Volcamiento_HERIDO      Choque_SOLO DAÑOS 
##            77.70592864            23.19341055           459.19849798 
##        Otro_SOLO DAÑOS          Choque_MUERTO       Atropello_MUERTO 
##             1.79296384             2.60887953             3.64475862 
## Volcamiento_SOLO DAÑOS  Caida ocupante_MUERTO            Otro_MUERTO 
##             1.09637057             0.48532768             0.13843138 
##     Volcamiento_MUERTO 
##             0.09837075

Viendo estos datos acerca de los indicadores de algunas clases de accidentes con la gravedad del mismo se ve que no aporta mucha variabilidad en el conjunto de variables y que por esta razón no podrían tener mucha influencia en el comportamiento de los clústers.

Hierarchical Clustering

## Primero se computa la matriz de dissimilaridad
d <- dist(barrios_centrados, method = "euclidean")

## Usamos complete linkage como métrica entre clústers
hc1 <- hclust(d, method = "complete" )

## Dendograma
plot(hc1, cex = 0.6, hang = -1)

Esta gráfica da una idea de que pueden existir alrededor de 4 clústers en nuestro agrupamiento por barrios. Para comprobar esto, utilizaremos distintas métricas, como slihoutte y el indíce de Dunn, para determinar que tan bien conformados están los clústers mientras usamos una grilla de posibles valores para el algoritmo K-Means.

K-Means

kmeans_barrios <- kmeans(barrios_centrados,4)
clusters_barrios <- scale(kmeans_barrios$centers,center=FALSE,scale=1/desv_est)
clusters_barrios <- scale(clusters_barrios,center = (-media),scale = FALSE)
print(clusters_barrios)
##   Atropello_HERIDO Caida ocupante_HERIDO Choque_HERIDO Otro_HERIDO
## 1        248.85714             217.00000     681.23810   277.09524
## 2         78.09091              72.62500     169.97727    82.35227
## 3         23.01911              17.38217      37.90446    19.85987
## 4        102.57143             114.07143     289.30952   130.47619
##   Volcamiento_HERIDO Choque_SOLO DAÑOS Otro_SOLO DAÑOS Choque_MUERTO
## 1          83.952381         1618.0952       5.2857143     7.7619048
## 2          23.647727          297.2273       1.3977273     1.6818182
## 3           6.019108           68.9172       0.2101911     0.5605096
## 4          38.857143          528.9524       2.4285714     3.6904762
##   Atropello_MUERTO Volcamiento_SOLO DAÑOS Caida ocupante_MUERTO   Otro_MUERTO
## 1       12.0952381              2.4761905            0.61904762  4.761905e-02
## 2        2.0454545              0.5568182            0.12500000  2.081668e-17
## 3        0.4649682              0.1528662            0.05095541 -1.734723e-17
## 4        2.9523810              1.5238095            0.66666667  1.190476e-01
##   Volcamiento_MUERTO
## 1       4.761905e-02
## 2       2.272727e-02
## 3       2.949030e-17
## 4      -5.204170e-18
## attr(,"scaled:scale")
##       Atropello_HERIDO  Caida ocupante_HERIDO          Choque_HERIDO 
##            0.012356115            0.015531403            0.005294156 
##            Otro_HERIDO     Volcamiento_HERIDO      Choque_SOLO DAÑOS 
##            0.012869031            0.043115694            0.002177707 
##        Otro_SOLO DAÑOS          Choque_MUERTO       Atropello_MUERTO 
##            0.557735733            0.383306316            0.274366592 
## Volcamiento_SOLO DAÑOS  Caida ocupante_MUERTO            Otro_MUERTO 
##            0.912100367            2.060463554            7.223795606 
##     Volcamiento_MUERTO 
##           10.165622987 
## attr(,"scaled:center")
##       Atropello_HERIDO  Caida ocupante_HERIDO          Choque_HERIDO 
##           -65.00000000           -59.96103896          -153.78571429 
##            Otro_HERIDO     Volcamiento_HERIDO      Choque_SOLO DAÑOS 
##           -70.33766234           -20.84740260          -302.50649351 
##        Otro_SOLO DAÑOS          Choque_MUERTO       Atropello_MUERTO 
##            -1.19805195            -1.79870130            -2.04870130 
## Volcamiento_SOLO DAÑOS  Caida ocupante_MUERTO            Otro_MUERTO 
##            -0.61363636            -0.19480519            -0.01948052 
##     Volcamiento_MUERTO 
##            -0.00974026

Esto nos da una idea del funcionamiento de estos clústers, por ejemplo el clúster 3 y 4 tienden a tener un comportamiento similar en sus centroides, por lo que la mejor opción sería tener 3 clústers en el cual estos dos grupos se dejen en un único grupo. Por otra parte, el grupo 1 presenta una alta tasa en todas las estadísticas, es decir es el grupo de barrios que tienen mayor cantidad de heridos y muertos en choques y atropellos. En tanto el grupo 2 tiene las estadísticas más bajas de los grupos conformados por esta técnica.

table(kmeans_barrios$cluster)
## 
##   1   2   3   4 
##  21  88 157  42

La tabla anterior nos muestra que la mayor cantidad de barrios se encuentran agrupados los barrios con bajos índices de gente herida, muertos y daños ocasionados por los accidentes. El problema de esto es que puede que no estemos observando por ejemplo la tasa de fatalidad en algunos barrios donde puede que no existan tantos accidentes pero que la mayoría de estos resulten en muerte para alguno de los actores involucrados.

Para poder determinar el mejor número de clústers a utilizar utilizaremos el índice de Dunn, que mide el ratio de la distancia más pequeña de observaciones de diferentes grupos contra la distancia más grande encontrada en un sólo cluster. Este valor va de 0 a infinito y valores más grandes indican una mejor separación.

dunn(clusters = kmeans_barrios$cluster, Data = barrios_centrados, method = "euclidean")
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.01599538

El código arroja un warning pero al parecer no tiene influencia en la computación de la métrica de acuerdo a una investigación y comparación de valores realizadas.

Ahora procedemos a probar distintos valores de k, desde 3 hasta 25, para así poder determinar el mejor número de grupos que nos dé indicaciones de como abordar el problema de accidentalidad.

k_test <- 3:25
k_full <- lapply(k_test,FUN=function(k){
  kmeans_barrios <- kmeans(barrios_centrados,k)
  return(kmeans_barrios)
})
## Warning: did not converge in 10 iterations
dunn_full <- sapply(k_full,FUN = function(l){
  dunn_index <- dunn(clusters = l$cluster, Data = barrios_centrados, method = "euclidean")
  return(dunn_index)
})
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
data_dunn <- data.frame(k_test,dunn_full)
fig <- plot_ly(data_dunn, x = ~k_test, y = ~dunn_full, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Indice de Dunn por cantidad de clusters")
fig
## Warning: `arrange_()` is deprecated as of dplyr 0.7.0.
## Please use `arrange()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
val_full <- sapply(k_full,FUN = function(l){
  value_rmse <- l$tot.withinss
  return(value_rmse)
})

data_ss <- data.frame(k_test,val_full)
fig <- plot_ly(data_ss, x = ~k_test, y = ~val_full, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Suma de error cuadrático total por cantidad de clusters")
fig

Según ambas gráficas el número de clústers que mejor distribuye los datos en distintos grupos sería 16. Lo cual indica que se requiere de una gran cantidad de grupos para que la variabilidad de cada uno de los grupos sea adecuada y por lo tanto que cada centroide explique de manera adecuada las características de los barrios que conforman cada grupo.

DBSCAN

Para terminar de corroborar esta información se procede a realizar el agrupamiento de los barrios usando el algoritmo DBSCAN que estima los grupos tomando en cuenta la densidad de los puntos. Dicho algoritmo es capaz de detectar grupos con cualquier tipo de forma.

Este algoritmo tiene en cuenta 2 parámetros principalmente. El primero es el radio que se utiliza para la detección de los grupos basados en la densidad y el segundo parámetro es la cantidad de puntos que debe encontrar un punto dentro del radio definido para considerarse como un punto principal.

Para obtener estos parámetros es necesario probar distintos escenarios para encontrar la mejor agrupación posible. En el caso del número de puntos en cada clúster probamos distintos valores desde 3 hasta 10 y con este valor se estima el radio que se utilizará en el algoritmo con el método de la rodilla con la distancia media que se encuentra usando el algoritmo de KNN, donde k es el número de puntos (desde 3 hasta 10).

dbscan::kNNdistplot(barrios_centrados, k =  3)
abline(h = 3.1, lty = 2)

La gráfica anterior nos muestra que la distancia media usando 3 vecinos es un valor cercano a 3.1, por lo que utilizaremos dicho valor como nuestro radio y el número de puntos igual a 3.

db <- fpc::dbscan(barrios_centrados, eps = 3.1, MinPts = 3)
table(db$cluster)
## 
##   0   1   2 
##  16 287   5
print("Índice de Dunn DBSCAN")
## [1] "Índice de Dunn DBSCAN"
dunn(clusters = db$cluster, Data = barrios_centrados)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.6523172
print("Índice de Dunn K-Means")
## [1] "Índice de Dunn K-Means"
dunn(clusters = k_full[[16]]$cluster, Data = barrios_centrados)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.04642174

En este caso el modelo de agrupamiento realizado con DBSCAN arrojó 3 grupos diferentes similar a lo realizado con K-Means igual a 3. Además, al comparar los resultados por el índice de Dunn del mejor de los escenarios de K-Means con los resultados de DBSCAN encontramos que DBSCAN mejora el desempeño al maximizar este índice, lo que nos indica que la relación entre la menor distancia entre dos grupos diferentes y la mayor distancia intra grupo es mayor en este escenario que en el caso de k-means.

Esto indica que los grupos de barrios puede que tengan formas complejas que no son fácilmente identificables por k-means.

Dado esta información partiremos de los 3 grupos encontrados con DBSCAN para obtener el mapa del agrupamiento de los barrios por accidentalidad.

2. Enfoque con variables porcentuales

En este enfoque utilizaremos las mismas variables que en el enfoque anterior pero con la diferencia de que en este caso computaremos el porcentaje de gravedad de accidente por tipo de accidente. Es decir, que un barrio x puede tener 100 accidentes de choque, pero dentro de esos 100 accidentes de choque 50 resultan con al menos una persona herida, 30 con solo daños materiales y 20 con al menos un muerto, lo que daría en el indicador de choque_muerto un valor de 0.2 o 20% y así sucesivamente para cada uno de los barrios. Por la naturaleza del cálculo de los indicadores, en esta ocasión no es necesario escalar las variables porque ya todas se encontrarán en un rango de 0 a 1. Además de lo descrito, en este enfoque agregaremos la variable de cantidad de accidentes total para cada barrio. Dicha variable si se transfomará para que quede en un rango de 0 a 1 y de esta manera no tenga un peso mayor en el cálculo de la distancia, para esto se utiliza la transformación min max.

Ya que utilizaremos los mismos indicadores utilizaremos como base los datos del enfoque anterior y calcularemos el total por accidente para poder estimar los porcentajes.

## Miramos la cantidad de accidentes por combinación de barrio, gravedad y clase de accidente
barrios_conteo2 <- accidentes %>%
  select(NOMBRE_BARRIO,GRAVEDAD,CLASE) %>%
  group_by(NOMBRE_BARRIO,GRAVEDAD,CLASE) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO', 'GRAVEDAD' (override with `.groups` argument)
head(barrios_conteo2)
## # A tibble: 6 x 4
## # Groups:   NOMBRE_BARRIO, GRAVEDAD [2]
##   NOMBRE_BARRIO GRAVEDAD   CLASE          conteo
##   <chr>         <chr>      <chr>           <int>
## 1 Aguas Frias   HERIDO     Atropello          16
## 2 Aguas Frias   HERIDO     Caida ocupante     11
## 3 Aguas Frias   HERIDO     Choque             11
## 4 Aguas Frias   HERIDO     Otro               12
## 5 Aguas Frias   HERIDO     Volcamiento         3
## 6 Aguas Frias   SOLO DAÑOS Choque             10

Ahora estimamos los totales por tipo de accidente para calcular los porcentajes.

barrios_conteo2_full <- accidentes %>%
  select(NOMBRE_BARRIO,CLASE) %>%
  group_by(NOMBRE_BARRIO,CLASE) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO' (override with `.groups` argument)
head(barrios_conteo2_full)
## # A tibble: 6 x 3
## # Groups:   NOMBRE_BARRIO [2]
##   NOMBRE_BARRIO  CLASE          conteo
##   <chr>          <chr>           <int>
## 1 Aguas Frias    Atropello          16
## 2 Aguas Frias    Caida ocupante     11
## 3 Aguas Frias    Choque             21
## 4 Aguas Frias    Otro               12
## 5 Aguas Frias    Volcamiento         3
## 6 Aldea Pablo VI Atropello          11

Ahora cruzamos las dos tablas para poder estimar los porcentajes.

barrios_conteo2 <- merge(barrios_conteo2,barrios_conteo2_full,by=c("NOMBRE_BARRIO","CLASE"),all.x = TRUE)
head(barrios_conteo2)
##   NOMBRE_BARRIO          CLASE   GRAVEDAD conteo.x conteo.y
## 1   Aguas Frias      Atropello     HERIDO       16       16
## 2   Aguas Frias Caida ocupante     HERIDO       11       11
## 3   Aguas Frias         Choque     HERIDO       11       21
## 4   Aguas Frias         Choque SOLO DAÑOS       10       21
## 5   Aguas Frias           Otro     HERIDO       12       12
## 6   Aguas Frias    Volcamiento     HERIDO        3        3
barrios_conteo2$perc <- barrios_conteo2$conteo.x/barrios_conteo2$conteo.y
## Ahora convertimos este data frame de formato narrow a formato wide
barrios_conteo2 <- barrios_conteo2 %>%
  mutate(indicador = paste(CLASE,GRAVEDAD,sep="_"))
barrios_conteo2 <- barrios_conteo2[,c("NOMBRE_BARRIO","indicador","perc")]
head(barrios_conteo2)
##   NOMBRE_BARRIO             indicador      perc
## 1   Aguas Frias      Atropello_HERIDO 1.0000000
## 2   Aguas Frias Caida ocupante_HERIDO 1.0000000
## 3   Aguas Frias         Choque_HERIDO 0.5238095
## 4   Aguas Frias     Choque_SOLO DAÑOS 0.4761905
## 5   Aguas Frias           Otro_HERIDO 1.0000000
## 6   Aguas Frias    Volcamiento_HERIDO 1.0000000

Ahora llevamos el data frame a formato wide.

barrios_conteo_indic2 <- barrios_conteo2 %>%
  pivot_wider(values_from="perc",names_from="indicador",values_fill = 0)
head(barrios_conteo_indic2)
## # A tibble: 6 x 14
##   NOMBRE_BARRIO Atropello_HERIDO `Caida ocupante~ Choque_HERIDO `Choque_SOLO DA~
##   <chr>                    <dbl>            <dbl>         <dbl>            <dbl>
## 1 Aguas Frias              1                1             0.524            0.476
## 2 Aldea Pablo ~            1                1             0.357            0.643
## 3 Alejandría               1                1             0.212            0.785
## 4 Alejandro Ec~            0.977            1             0.439            0.557
## 5 Alfonso López            0.972            1             0.396            0.600
## 6 Altamira                 1                0.990         0.404            0.596
## # ... with 9 more variables: Otro_HERIDO <dbl>, Volcamiento_HERIDO <dbl>,
## #   `Otro_SOLO DAÑOS` <dbl>, Choque_MUERTO <dbl>, Atropello_MUERTO <dbl>,
## #   `Volcamiento_SOLO DAÑOS` <dbl>, `Caida ocupante_MUERTO` <dbl>,
## #   Otro_MUERTO <dbl>, Volcamiento_MUERTO <dbl>

Ahora agregamos la variable con el total de accidentes por barrio.

barrio_total <- accidentes %>%
  select(NOMBRE_BARRIO) %>%
  group_by(NOMBRE_BARRIO) %>%
  summarize(total = n())
## `summarise()` ungrouping output (override with `.groups` argument)
barrios_conteo_indic2 <- merge(barrios_conteo_indic2,barrio_total,by="NOMBRE_BARRIO",all.x = TRUE)
head(barrios_conteo_indic2)
##          NOMBRE_BARRIO Atropello_HERIDO Caida ocupante_HERIDO Choque_HERIDO
## 1          Aguas Frias        1.0000000             1.0000000     0.5238095
## 2       Aldea Pablo VI        1.0000000             1.0000000     0.3571429
## 3           Alejandría        1.0000000             1.0000000     0.2119565
## 4 Alejandro Echavarría        0.9770115             1.0000000     0.4385965
## 5        Alfonso López        0.9724138             1.0000000     0.3957704
## 6             Altamira        1.0000000             0.9903846     0.4035088
##   Choque_SOLO DAÑOS Otro_HERIDO Volcamiento_HERIDO Otro_SOLO DAÑOS
## 1         0.4761905   1.0000000          1.0000000      0.00000000
## 2         0.6428571   0.7500000          1.0000000      0.25000000
## 3         0.7853261   0.9000000          1.0000000      0.10000000
## 4         0.5570175   1.0000000          1.0000000      0.00000000
## 5         0.5996979   0.9896373          0.9803922      0.01036269
## 6         0.5964912   0.9782609          1.0000000      0.01086957
##   Choque_MUERTO Atropello_MUERTO Volcamiento_SOLO DAÑOS Caida ocupante_MUERTO
## 1   0.000000000       0.00000000             0.00000000           0.000000000
## 2   0.000000000       0.00000000             0.00000000           0.000000000
## 3   0.002717391       0.00000000             0.00000000           0.000000000
## 4   0.004385965       0.02298851             0.00000000           0.000000000
## 5   0.004531722       0.02758621             0.01960784           0.000000000
## 6   0.000000000       0.00000000             0.00000000           0.009615385
##   Otro_MUERTO Volcamiento_MUERTO total
## 1  0.00000000                  0    63
## 2  0.00000000                  0    36
## 3  0.00000000                  0   428
## 4  0.00000000                  0   773
## 5  0.00000000                  0  1239
## 6  0.01086957                  0   720

Transformamos la variable del total con la transformación min max.

max_total <- max(barrios_conteo_indic2$total)
min_total <- min(barrios_conteo_indic2$total)
barrios_conteo_indic2$total <- (barrios_conteo_indic2$total - min_total)/(max_total - min_total)
row.names(barrios_conteo_indic2) <- barrios_conteo_indic2$NOMBRE_BARRIO
barrios_conteo_indic2 <- barrios_conteo_indic2[,-1]
head(barrios_conteo_indic2)
##                      Atropello_HERIDO Caida ocupante_HERIDO Choque_HERIDO
## Aguas Frias                 1.0000000             1.0000000     0.5238095
## Aldea Pablo VI              1.0000000             1.0000000     0.3571429
## Alejandría                  1.0000000             1.0000000     0.2119565
## Alejandro Echavarría        0.9770115             1.0000000     0.4385965
## Alfonso López               0.9724138             1.0000000     0.3957704
## Altamira                    1.0000000             0.9903846     0.4035088
##                      Choque_SOLO DAÑOS Otro_HERIDO Volcamiento_HERIDO
## Aguas Frias                  0.4761905   1.0000000          1.0000000
## Aldea Pablo VI               0.6428571   0.7500000          1.0000000
## Alejandría                   0.7853261   0.9000000          1.0000000
## Alejandro Echavarría         0.5570175   1.0000000          1.0000000
## Alfonso López                0.5996979   0.9896373          0.9803922
## Altamira                     0.5964912   0.9782609          1.0000000
##                      Otro_SOLO DAÑOS Choque_MUERTO Atropello_MUERTO
## Aguas Frias               0.00000000   0.000000000       0.00000000
## Aldea Pablo VI            0.25000000   0.000000000       0.00000000
## Alejandría                0.10000000   0.002717391       0.00000000
## Alejandro Echavarría      0.00000000   0.004385965       0.02298851
## Alfonso López             0.01036269   0.004531722       0.02758621
## Altamira                  0.01086957   0.000000000       0.00000000
##                      Volcamiento_SOLO DAÑOS Caida ocupante_MUERTO Otro_MUERTO
## Aguas Frias                      0.00000000           0.000000000  0.00000000
## Aldea Pablo VI                   0.00000000           0.000000000  0.00000000
## Alejandría                       0.00000000           0.000000000  0.00000000
## Alejandro Echavarría             0.00000000           0.000000000  0.00000000
## Alfonso López                    0.01960784           0.000000000  0.00000000
## Altamira                         0.00000000           0.009615385  0.01086957
##                      Volcamiento_MUERTO       total
## Aguas Frias                           0 0.012088126
## Aldea Pablo VI                        0 0.006823942
## Alejandría                            0 0.083252096
## Alejandro Echavarría                  0 0.150516670
## Alfonso López                         0 0.241372587
## Altamira                              0 0.140183272

Ahora podemos proceder a realizar el mismo procedimiento que utilizamos en el primer enfoque para determinar los grupos de barrios que existen con esta configuración de variables.

Hierarchical Clustering

## Primero se computa la matriz de dissimilaridad
d <- dist(barrios_conteo_indic2, method = "euclidean")

## Usamos complete linkage como métrica entre clústers
hc2 <- hclust(d, method = "complete" )

## Dendograma
plot(hc2, cex = 0.6, hang = -1)
abline(h = 1.05, lty = 2)

Con un corte del dendograma alrededor de 1.05 obtendríamos más de 10 grupos porque existen una serie de barrios que se comportan como sujetos alejados de los demás barrios. Si agruparamos estos barrios en un grupo especial tendríamos 5 grupos de barrios de acuerdo a su accidentalidad. Procedemos a mirar como se comportarían estos 5 grupos al realizar la agrupación mediante un método de capa única.

K-Means

kmeans_barrios2 <- kmeans(barrios_conteo_indic2,5)
clusters_barrios2 <- as.data.frame(kmeans_barrios2$centers)
clusters_barrios2$total <- (clusters_barrios2$total*(max_total - min_total)) + min_total
View(clusters_barrios2)
clusters_barrios2
##   Atropello_HERIDO Caida ocupante_HERIDO Choque_HERIDO Choque_SOLO DAÑOS
## 1        0.3500000             0.3000000     0.1892857         0.5035714
## 2        0.9626503             0.9960863     0.3108115         0.6848571
## 3        0.5384615             0.5384615     0.2730159         0.7098901
## 4        0.9541611             0.9975624     0.3091055         0.6875222
## 5        0.9731810             0.9867408     0.4832483         0.5090126
##   Otro_HERIDO Volcamiento_HERIDO Otro_SOLO DAÑOS Choque_MUERTO Atropello_MUERTO
## 1   0.0000000          0.0500000      0.00000000   0.207142857       0.05000000
## 2   0.9796040          0.9654196      0.02017315   0.004331334       0.02365110
## 3   1.0000000          0.1538462      0.00000000   0.017094017       0.07692308
## 4   0.9770298          0.9689668      0.02288072   0.003372298       0.04583887
## 5   0.9896255          0.9859271      0.01021464   0.007739162       0.02681895
##   Volcamiento_SOLO DAÑOS Caida ocupante_MUERTO  Otro_MUERTO Volcamiento_MUERTO
## 1             0.05000000           0.000000000 0.000000e+00       0.0000000000
## 2             0.03435947           0.003913702 2.228071e-04       0.0002209456
## 3             0.00000000           0.000000000 0.000000e+00       0.0000000000
## 4             0.03048376           0.002437570 8.944544e-05       0.0005494505
## 5             0.01344084           0.004409664 1.598567e-04       0.0006321113
##        total
## 1    5.50000
## 2  562.32877
## 3   18.76923
## 4 2960.57692
## 5  438.48673

En este modelo se pueden apreciar cosas interesantes en cuanto al porcentaje de gravedad por cada tipo de accidente. Por ejemplo, se puede apreciar de que los barrios donde existe una mayor accidentalidad en total (grupo 4) no es el grupo donde en promedio se presentan mayor cantidad de casos donde el resultado del accidentes es un choque con al menos una persona herida; ni el grupo donde en promedio se presentan mayor número de fatalidades en choques.

Al igual que en el enfoque anterior se procede a estimar el mejor número de clústers con base en el índice de Dunn y la suma de errores cuadráticos.

k_test <- 3:25
k_full2 <- lapply(k_test,FUN=function(k){
  kmeans_barrios <- kmeans(barrios_conteo_indic2,k)
  return(kmeans_barrios)
})

dunn_full2 <- sapply(k_full2,FUN = function(l){
  dunn_index <- dunn(clusters = l$cluster, Data = barrios_conteo_indic2, method = "euclidean")
  return(dunn_index)
})
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
data_dunn2 <- data.frame(k_test,dunn_full2)
fig <- plot_ly(data_dunn2, x = ~k_test, y = ~dunn_full2, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Indice de Dunn por cantidad de clusters")
fig
val_full2 <- sapply(k_full2,FUN = function(l){
  value_rmse <- l$tot.withinss
  return(value_rmse)
})

data_ss2 <- data.frame(k_test,val_full2)
fig <- plot_ly(data_ss2, x = ~k_test, y = ~val_full2, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Suma de error cuadrático total por cantidad de clusters")
fig

De acuerdo con estas gráficas se podrían utilizar valores como 7, 9 o 10 en el caso de la suma cuadrática del error o 3 en el caso del índice de Dunn. Para este caso intentaremos con la opción de 7 grupos.

En general hemos visto que existen un grupo de barrios con características muy diferentes a las de los demás barrios tal y como lo apreciamos en el dendograma realizado.

DBSCAN

Para terminar de corroborar esta información se procede a realizar el agrupamiento de los barrios usando el algoritmo DBSCAN que estima los grupos tomando en cuenta la densidad de los puntos. Dicho algoritmo es capaz de detectar grupos con cualquier tipo de forma.

Primero procedemos a estimar el radio y el número mínimo de puntos para utilizar el algoritmo.

dbscan::kNNdistplot(barrios_conteo_indic2, k = 4)
abline(h = 0.26, lty = 2)

Después de realizar varias pruebas con los valores para los parámetros de DBSCAN, encontramos que se podría utilizar un radio de distancia de 0.26 y con una cantidad mínima de 4 puntos para que un punto dado se considere como un punto central. A continuación, procedemos a probar la agrupación con DBSCAN:

db2 <- fpc::dbscan(barrios_conteo_indic2, eps = 0.26, MinPts = 4)
table(db2$cluster)
## 
##   0   1   2 
##  23 280   5

Al igual que con el caso de DBSCAN para las variables de conteo encontramos que en este caso también se estiman 3 grupos diferentes para la accidentalidad en los barrios de Medellín. Ahora calculamos el índice de Dunn para comparar el desempeño de este modelo con el de K-Means.

print("Índice de Dunn DBSCAN")
## [1] "Índice de Dunn DBSCAN"
dunn(clusters = db2$cluster, Data = barrios_conteo_indic2)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.6024686
print("Índice de Dunn K-Means")
## [1] "Índice de Dunn K-Means"
dunn(clusters = k_full2[[7]]$cluster, Data = barrios_conteo_indic2)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.006335618

Al comparar los resultados del índice de Dunn de los dos casos encontramos que, al igual que en el enfoque con variables de conteo, el agrupamiento realizado por medio de DBSCAN mejora el desempeño presentado por K-Means en el mejor de las agrupaciones realizadas. Lo cual refuerza la idea de utilizar un método que no dependa en grupos con formas aproximadamentes circulares o elipsoidales.

Mirando los dos enfoques hemos decidido utilizar el primer enfoque eliminando algunas variables que no aportan variabilidad al conjunto de datos y adicionando algunas variables del segundo enfoque como tasas de mortalidad en los principales accidentes para poder realizar la agrupación. Así mismo incluiremos variables de población para ver si tienen algún efecto en la forma de la agrupación.

3. Primer enfoque depurado con variables adicionales

De acuerdo a lo mencionado en el parráfo anterior, en este enfoque utilizaremos como base la información del primer enfoque y le adicionaremos variables relacionadas con tasas de mortalidad o de heridos en los principales indicadores (algo similar al enfoque 2) y otra variable como la población en cada uno de los barrios. Además en el primer enfoque utilizamos el total de accidentes en los 5 años analizados en cada barrio, lo cual puede sesgar un poco la forma de generación de los agrupamientos. Por esta razón, utilizaremos el promedio de accidentalidad y de tasas por cada uno de los años para que los datos no se vean influenciados por un año con un año con comportamiento anormal sino que sea la tendencia central del comportamiento por barrio.

Primero, estimamos los indicadores.

barrios_year <- accidentes %>%
  select(NOMBRE_BARRIO,PERIODO,CLASE,GRAVEDAD) %>%
  group_by(NOMBRE_BARRIO,PERIODO,CLASE,GRAVEDAD) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO', 'PERIODO', 'CLASE' (override with `.groups` argument)
head(barrios_year)
## # A tibble: 6 x 5
## # Groups:   NOMBRE_BARRIO, PERIODO, CLASE [6]
##   NOMBRE_BARRIO PERIODO CLASE          GRAVEDAD conteo
##   <chr>           <int> <chr>          <chr>     <int>
## 1 Aguas Frias      2014 Atropello      HERIDO        6
## 2 Aguas Frias      2014 Caida ocupante HERIDO        5
## 3 Aguas Frias      2014 Choque         HERIDO        6
## 4 Aguas Frias      2014 Otro           HERIDO        4
## 5 Aguas Frias      2014 Volcamiento    HERIDO        1
## 6 Aguas Frias      2015 Atropello      HERIDO        4

Ahora calculamos el promedio por año.

barrios_year_full <- barrios_year %>%
  group_by(NOMBRE_BARRIO,CLASE,GRAVEDAD) %>%
  summarize(conteo_mean = mean(conteo))
## `summarise()` regrouping output by 'NOMBRE_BARRIO', 'CLASE' (override with `.groups` argument)
head(barrios_year_full)
## # A tibble: 6 x 4
## # Groups:   NOMBRE_BARRIO, CLASE [5]
##   NOMBRE_BARRIO CLASE          GRAVEDAD   conteo_mean
##   <chr>         <chr>          <chr>            <dbl>
## 1 Aguas Frias   Atropello      HERIDO            3.2 
## 2 Aguas Frias   Caida ocupante HERIDO            2.2 
## 3 Aguas Frias   Choque         HERIDO            3.67
## 4 Aguas Frias   Choque         SOLO DAÑOS        2.5 
## 5 Aguas Frias   Otro           HERIDO            2.4 
## 6 Aguas Frias   Volcamiento    HERIDO            1

Listo, ya tenemos la información del promedio de accidentes en clase y gravedad para cada barrio por todos los años. Ahora procedemos a llevar esta tabla al formato wide y allí sacaremos los indicadores que no encontramos relevantes para el estudio. Para empezar sacaremos todos los accidentes que dicen otros, ya que al ser una categoría tan ambigua es difícil determinar cual sería el plan de acción donde ocurran muchos accidentes de este estilo, porque en realidad no sabemos que tipo de accidentes son. Así mismo, exluiremos aquellos que dicen volcamiento y caída ocupante, ya que también es difícil preveer un accidente de este estilo y que medidas podrían contrarrestarlo.

barrios_year_full <- barrios_year_full %>%
  filter(CLASE %in% c("Atropello","Choque"))
barrios_year_full2 <- barrios_year_full
head(barrios_year_full)
## # A tibble: 6 x 4
## # Groups:   NOMBRE_BARRIO, CLASE [4]
##   NOMBRE_BARRIO  CLASE     GRAVEDAD   conteo_mean
##   <chr>          <chr>     <chr>            <dbl>
## 1 Aguas Frias    Atropello HERIDO            3.2 
## 2 Aguas Frias    Choque    HERIDO            3.67
## 3 Aguas Frias    Choque    SOLO DAÑOS        2.5 
## 4 Aldea Pablo VI Atropello HERIDO            2.75
## 5 Aldea Pablo VI Choque    HERIDO            1.67
## 6 Aldea Pablo VI Choque    SOLO DAÑOS        2.25

Las otras variables que no consideramos importantes las quitaremos en la siguiente sección después de que llevemos los datos al formato wide.

barrios_year_full <- barrios_year_full %>%
  mutate(indicador = paste(CLASE,GRAVEDAD,sep="_"))
barrios_year_full <- barrios_year_full[,c("NOMBRE_BARRIO","indicador","conteo_mean")]
barrios_mean <- barrios_year_full %>%
  pivot_wider(values_from="conteo_mean",names_from="indicador",values_fill = 0)
head(barrios_mean)
## # A tibble: 6 x 6
## # Groups:   NOMBRE_BARRIO [6]
##   NOMBRE_BARRIO Atropello_HERIDO Choque_HERIDO `Choque_SOLO DA~ Choque_MUERTO
##   <chr>                    <dbl>         <dbl>            <dbl>         <dbl>
## 1 Aguas Frias               3.2           3.67             2.5            0  
## 2 Aldea Pablo ~             2.75          1.67             2.25           0  
## 3 Alejandría                3            15.6             57.8            1  
## 4 Alejandro Ec~            17            40               50.8            1  
## 5 Alfonso López            28.2          52.4             79.4            1.5
## 6 Altamira                  9.4          36.8             54.4            0  
## # ... with 1 more variable: Atropello_MUERTO <dbl>

Para mirar las variables que vamos a eliminar vamos a revisar la desviación estándar de cada variable para determinar la variabilidad que aportan al conjunto de datos.

print("Desviación estándar")
## [1] "Desviación estándar"
sapply(barrios_mean[2:6],sd)
##  Atropello_HERIDO     Choque_HERIDO Choque_SOLO DAÑOS     Choque_MUERTO 
##        16.1013427        37.6918643        91.7638722         0.8234724 
##  Atropello_MUERTO 
##         0.8797056
print("Media")
## [1] "Media"
sapply(barrios_mean[2:6],mean)
##  Atropello_HERIDO     Choque_HERIDO Choque_SOLO DAÑOS     Choque_MUERTO 
##        13.1261905        30.8678030        60.6209957         0.8127165 
##  Atropello_MUERTO 
##         0.8090909

Según estos datos podríamos eliminar todas las variables que presentan una desviación estándar y una media inferior a 1, pero ya que consideramos que atropello muerto y choque muerto son variables relevantes para determinar el plan de acción porque son de los accidentes con mayor frecuencia.

Ahora podemos agregar las variables adicionales que incluimos en el segundo escenario. Para esto calcularemos el promedio de los accidentes por cada clase de accidente y luego computaremos las tasas para cruzarlas con la información que ya tenemos de la cantidad promedio por barrio. Como ya tenemos la cantidad media por todos los años para cada accidente y cada barrio solo necesitamos computar el total.

barrios_total_year <- accidentes %>%
  select(NOMBRE_BARRIO,PERIODO,CLASE) %>%
  group_by(NOMBRE_BARRIO,PERIODO,CLASE) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO', 'PERIODO' (override with `.groups` argument)
head(barrios_total_year)
## # A tibble: 6 x 4
## # Groups:   NOMBRE_BARRIO, PERIODO [2]
##   NOMBRE_BARRIO PERIODO CLASE          conteo
##   <chr>           <int> <chr>           <int>
## 1 Aguas Frias      2014 Atropello           6
## 2 Aguas Frias      2014 Caida ocupante      5
## 3 Aguas Frias      2014 Choque              6
## 4 Aguas Frias      2014 Otro                4
## 5 Aguas Frias      2014 Volcamiento         1
## 6 Aguas Frias      2015 Atropello           4
## Computamos el promedio de accidentes por clase de accidente
barrios_total_full <- barrios_total_year %>%
  group_by(NOMBRE_BARRIO,CLASE) %>%
  summarize(conteo_mean = mean(conteo))
## `summarise()` regrouping output by 'NOMBRE_BARRIO' (override with `.groups` argument)
## Cruzamos con el promedio por clase y gravedad
barrios_total_year <- merge(barrios_year_full2,barrios_total_full,by = c("NOMBRE_BARRIO","CLASE"),all.x=TRUE)

## Dejamos solo los accidentes que nos interesan en su tasa, calculamos la tasa y concatenamos el nombre del indicador
barrios_total_year <- barrios_total_year %>%
  filter(CLASE %in% c("Atropello","Choque")) %>%
  mutate(perc = conteo_mean.x/conteo_mean.y,
         indicador = paste("Tasa",CLASE,GRAVEDAD,sep="_"))
barrios_total_year <- barrios_total_year[,c("NOMBRE_BARRIO","indicador","perc")]
head(barrios_total_year)
##    NOMBRE_BARRIO              indicador      perc
## 1    Aguas Frias  Tasa_Atropello_HERIDO 1.0000000
## 2    Aguas Frias     Tasa_Choque_HERIDO 0.8730159
## 3    Aguas Frias Tasa_Choque_SOLO DAÑOS 0.5952381
## 4 Aldea Pablo VI  Tasa_Atropello_HERIDO 1.0000000
## 5 Aldea Pablo VI     Tasa_Choque_HERIDO 0.5952381
## 6 Aldea Pablo VI Tasa_Choque_SOLO DAÑOS 0.8035714
## Lo llevamos a formato wide
barrios_total_indic <- barrios_total_year %>%
  pivot_wider(values_from="perc",names_from="indicador",values_fill = 0)
print("Desviación estándar")
## [1] "Desviación estándar"
sapply(barrios_total_indic[2:6],sd)
##  Tasa_Atropello_HERIDO     Tasa_Choque_HERIDO Tasa_Choque_SOLO DAÑOS 
##              0.2055471              0.1594876              0.1495639 
##     Tasa_Choque_MUERTO  Tasa_Atropello_MUERTO 
##              0.1016296              0.1255470
print("Media")
## [1] "Media"
sapply(barrios_total_indic[2:6],mean)
##  Tasa_Atropello_HERIDO     Tasa_Choque_HERIDO Tasa_Choque_SOLO DAÑOS 
##             0.93104252             0.39921682             0.63781149 
##     Tasa_Choque_MUERTO  Tasa_Atropello_MUERTO 
##             0.02696787             0.07595799

Vamos a dejar únicamente las tasas de choque herido, tasa choque muerto y tasa atropello muerto, ya que los demás índices son el complemento de las tasas mencionadas.

barrios_total_indic <- barrios_total_indic[,c("NOMBRE_BARRIO","Tasa_Choque_HERIDO","Tasa_Choque_MUERTO","Tasa_Atropello_MUERTO")]

En general las variables se ven bien, ahora las vamos a añadir al conjunto con las demás variables.

barrios_mean <- merge(barrios_mean,barrios_total_indic,by="NOMBRE_BARRIO",all.x=TRUE)
head(barrios_mean)
##          NOMBRE_BARRIO Atropello_HERIDO Choque_HERIDO Choque_SOLO DAÑOS
## 1          Aguas Frias             3.20      3.666667              2.50
## 2       Aldea Pablo VI             2.75      1.666667              2.25
## 3           Alejandría             3.00     15.600000             57.80
## 4 Alejandro Echavarría            17.00     40.000000             50.80
## 5        Alfonso López            28.20     52.400000             79.40
## 6             Altamira             9.40     36.800000             54.40
##   Choque_MUERTO Atropello_MUERTO Tasa_Choque_HERIDO Tasa_Choque_MUERTO
## 1           0.0                0          0.8730159         0.00000000
## 2           0.0                0          0.5952381         0.00000000
## 3           1.0                0          0.2119565         0.01358696
## 4           1.0                1          0.4385965         0.01096491
## 5           1.5                1          0.3957704         0.01132931
## 6           0.0                0          0.4035088         0.00000000
##   Tasa_Atropello_MUERTO
## 1            0.00000000
## 2            0.00000000
## 3            0.00000000
## 4            0.05747126
## 5            0.03448276
## 6            0.00000000
row.names(barrios_mean) <- barrios_mean$NOMBRE_BARRIO
barrios_mean <- barrios_mean[,-1]

max_list <- list()
min_list <- list()

for(i in 1:5){
  max_total <- max(barrios_mean[,i])
  min_total <- min(barrios_mean[,i])
  barrios_mean[,i] <- (barrios_mean[,i] - min_total)/(max_total - min_total)
  max_list[[i]] <- max_total
  min_list[[i]] <- min_total
}

head(barrios_mean)
##                      Atropello_HERIDO Choque_HERIDO Choque_SOLO DAÑOS
## Aguas Frias                0.01807910    0.01469017       0.004323763
## Aldea Pablo VI             0.01553672    0.00667735       0.003891387
## Alejandría                 0.01694915    0.06250000       0.099965410
## Alejandro Echavarría       0.09604520    0.16025641       0.087858872
## Alfonso López              0.15932203    0.20993590       0.137322726
## Altamira                   0.05310734    0.14743590       0.094085092
##                      Choque_MUERTO Atropello_MUERTO Tasa_Choque_HERIDO
## Aguas Frias                  0.000        0.0000000          0.8730159
## Aldea Pablo VI               0.000        0.0000000          0.5952381
## Alejandría                   0.250        0.0000000          0.2119565
## Alejandro Echavarría         0.250        0.1923077          0.4385965
## Alfonso López                0.375        0.1923077          0.3957704
## Altamira                     0.000        0.0000000          0.4035088
##                      Tasa_Choque_MUERTO Tasa_Atropello_MUERTO
## Aguas Frias                  0.00000000            0.00000000
## Aldea Pablo VI               0.00000000            0.00000000
## Alejandría                   0.01358696            0.00000000
## Alejandro Echavarría         0.01096491            0.05747126
## Alfonso López                0.01132931            0.03448276
## Altamira                     0.00000000            0.00000000

Con esta información ya podemos iniciar nuestro proceso de agrupación. Este proceso lo realizaremos con DBSCAN ya que es el que mejor resultados ha arrojado hasta el momento, sin embargo probaremos con K-Means y Hierarchical clustering para determinar el mejor modelo con base al índice de Dunn.

Primero vamos a determinar los parámetro del modelo, para ello vamos a probar con una rejilla de valores posibles de K (para el algoritmo de vecinos más cercanos) y después con cada K estimaremos el valor medio del radio a utilizar para determinar la densidad. Es decir probaremos con K = 3 hasta K = 10 e iremos anotando los valores de cada uno de los radios para después seleccionar el modelo que tenga el mayor índice de Dunn.

## Definir función para pasar la gráfica para determinar el radio con plotly
plotly_knn <- function(distancias, K){
  distancias <- distancias[order(distancias)]
  x <- seq_along(distancias)
  datos <- data.frame(x,distancias)
  fig <- plot_ly(datos, x = ~x, y = ~distancias, type = 'scatter', mode = 'lines')
  fig <- fig %>% layout(title = "Gráfica para determinar el radio a utilizar en DBSCAN",
         xaxis = list(title = "Barrios ordenados por distancia"),
         yaxis = list(title = paste("Distancia con",K,"vecinos")))
  print(paste("Distancia con",K,"vecinos"))
  return(fig)
}

## Grilla de valores
k_values <- 3:10

list_figures <- lapply(k_values, FUN = function(K){
  k_distancias <- dbscan::kNNdist(barrios_mean, k = K)
  return(plotly_knn(k_distancias,K))
})
## [1] "Distancia con 3 vecinos"
## [1] "Distancia con 4 vecinos"
## [1] "Distancia con 5 vecinos"
## [1] "Distancia con 6 vecinos"
## [1] "Distancia con 7 vecinos"
## [1] "Distancia con 8 vecinos"
## [1] "Distancia con 9 vecinos"
## [1] "Distancia con 10 vecinos"
fig <- subplot(list_figures,nrows = 4, shareX = TRUE,shareY = FALSE)

fig

De acuerdo a las gráficas hemos estimado los distintos valores del radio para cada uno de los K evaluados en la grilla. Con estos datos procederemos a realizara la estimación de clústers para cada uno de los escenarios y compararlos para determinar cual configuración arroja el mejor índice de Dunn.

## Valores de radios para cada uno de los puntos mínimos
eps_values <- c(0.21,0.21,0.21,0.21,0.25,0.24,0.21,0.21)
idx <- seq_along(eps_values)

## Ahora procedemos a realizara las agrupaciones con DBSCAN
list_dbscan <- lapply(idx,FUN = function(i){
  return(fpc::dbscan(barrios_mean, eps = eps_values[i], MinPts = k_values[i]))
})

dunn_full3 <- sapply(list_dbscan,FUN = function(l){
  dunn_index <- dunn(clusters = l$cluster, Data = barrios_mean)
  return(dunn_index)
})
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
data_dunn3 <- data.frame(k_values,dunn_full3)
fig <- plot_ly(data_dunn3, x = ~k_values, y = ~dunn_full3, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Indice de Dunn por cantidad de puntos")
fig

De acuerdo a esta gráfica tener hasta 9 puntos dentro no afecta significativamente el desempeño del modelo, por esto escogeremos uno de loq eue tiene la menor cantidad de puntos y lo mejoraremos probando múltiples valores de epsilon (radio).

db <- fpc::dbscan(barrios_mean, eps = 0.21, MinPts = 4)
print(table(db$cluster))
## 
##   0   1   2 
##  30 126 152
dunn(clusters = db$cluster, Data = barrios_mean)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.2504498

Después de múltiples intentos encontramos que esta es de las mejores configuraciones que podemos obtener con este algoritmo, por lo cual es la que utilizaremos en comparación con los resultados de otros modelos. Así mismo, consideramos necesario revisar en detalle la salida del algoritmo para determinar su funcionalidad.

db
## dbscan Pts=308 MinPts=4 eps=0.21
##         0   1   2
## border 30   2   7
## seed    0 124 145
## total  30 126 152
barrios_mean2 <- barrios_mean

## Añadimos etiqueta del grupo a cada uno de los barrios
barrios_mean2$grupo <- db$cluster

## Convertimos los datos a su escala original para mayor interpretabilidad
for(i in 1:5){
  barrios_mean2[,i] <- (barrios_mean2[,i] * (max_list[[i]] - min_list[[i]])) + min_list[[i]]
}

Esto es interesante, el resultado del agrupamiento hecho con DBSCAN arroja que existen 30 puntos que se consideran como puntos con ruido, por lo que en realidad el algoritmo encontró 2 grupos densos y un grupo adicional de puntos distantes que no concuerda con la información de los demás grupos. Esto puede traer resultados adversos a la hora de la agrupación, ya que se pueden estar uniendo en un único grupo barrios muy diferentes con casos extremos donde hay pocos accidentes y así mismo casos con demasiados accidentes.

db <- fpc::dbscan(barrios_mean, eps = 0.202, MinPts = 4)
print(table(db$cluster))
## 
##   0   1   2   3 
##  31  82 151  44
dunn(clusters = db$cluster, Data = barrios_mean)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.2028749
db
## dbscan Pts=308 MinPts=4 eps=0.202
##         0  1   2  3
## border 31  0   6  2
## seed    0 82 145 42
## total  31 82 151 44

Vemos que la configuración con un radio de 0.21 arroja un mejor resultado en el índice de Dunn ya que agrupa en un solo clúster casi todos los puntos y deja en otros dos grupos puntos que se pueden considerar distantes. Al revisar los datos de los barrios arrojados por el agrupamiento de 3 clústers encontramos que hay diferencias en los datos y que sería mejor dividir con un grupo adicional, tal y como lo hace la generación de 4 grupos. Así mismo, vemos que en ambos casos existen puntos que se consideran ruido y son agrupados en el clúster 0. Es necesario revisar y asignar una etiqueta real con base en el comportamiento de estos puntos, ya que pueden ser barrios con una alta accidentalidad o una baja accidentalidad.

Vamos a revisar cada uno de los grupos y determinar que pasos siguen en el análisis.

barrios_mean2 <- barrios_mean

## Añadimos etiqueta del grupo a cada uno de los barrios
barrios_mean2$grupo <- db$cluster

## Convertimos los datos a su escala original para mayor interpretabilidad
for(i in 1:5){
  barrios_mean2[,i] <- (barrios_mean2[,i] * (max_list[[i]] - min_list[[i]])) + min_list[[i]]
}

Finalmente, para revisar estos resultados los comparamos con los encontrados con el clustering jerárquico.

## Primero se computa la matriz de dissimilaridad
d <- dist(barrios_mean, method = "euclidean")

## Usamos complete linkage como métrica entre clústers
hc3 <- hclust(d, method = "complete" )

## Dendograma
plot(hc3, cex = 0.6, hang = -1)
abline(h = 1.5, lty = 2)

Si cortamos el dendograma a una altura de 1.5 podríamos obtener 3 grupos diferentes para realizar los planes de acción de acuerdo a las características de los barrios en dichas zonas.

grupos_hclust <- cutree(hc3,k=3)
print(table(grupos_hclust))
## grupos_hclust
##   1   2   3 
## 292  12   4
dunn(clusters = grupos_hclust, Data = barrios_mean)
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
## [1] 0.1196852

Vemos que en general tiene mejores resultados que K-Means. Vamos a probar con distintos grupos para determinar cual obtiene el mejor índice de Dunn.

k_test <- 3:8
k_full3 <- lapply(k_test,FUN=function(K){
  grupos_hclust <- cutree(hc3,k=K)
  return(grupos_hclust)
})

dunn_full3 <- sapply(k_full3,FUN = function(l){
  dunn_index <- dunn(clusters = l, Data = barrios_mean)
  return(dunn_index)
})
## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used

## Warning in if (class(distance) == "dist") distance <- as.matrix(distance): the
## condition has length > 1 and only the first element will be used
data_dunn3 <- data.frame(k_test,dunn_full3)
fig <- plot_ly(data_dunn3, x = ~k_test, y = ~dunn_full3, type = 'scatter', mode = 'lines')
fig <- fig %>% layout(title = "Indice de Dunn por cantidad de clusters")
fig

Por los resultados encontrados en el DBSCAN escogemos este como el modelo para el agrupamiento, ya que el clustering jerárquico tiene menor índice de Dunn.

barrios_mean2[barrios_mean2$grupo == 0,]
##                               Atropello_HERIDO Choque_HERIDO Choque_SOLO DAÑOS
## Andalucía                            11.200000      7.600000             17.40
## Barrio Colón                         59.600000    129.400000            436.40
## Belén                                39.600000     98.600000            289.80
## Cabecera San Antonio de Prado        46.800000     85.800000            134.00
## Campo Amor                           44.000000    208.000000            449.20
## Caribe                               31.600000    191.200000            396.60
## Castilla                             65.000000    141.800000            143.20
## Cementerio Universal                  1.250000      8.800000             21.20
## Corazón de Jesús                     40.000000    114.200000            340.80
## Cristo Rey                           29.800000    113.600000            216.00
## El Chagualo                          33.000000     79.400000            155.40
## El Nogal-Los Almendros                1.800000     16.600000             35.80
## Guayaquil                            67.400000    138.200000            492.60
## Jesús Nazareno                       33.200000     97.400000            168.80
## Juan XXIII La Quiebra                 7.800000      3.600000             10.40
## La Candelaria                       177.000000    120.000000            578.20
## La Cuchilla                           0.000000      0.000000              0.00
## La Frisola                            0.000000      0.000000              0.00
## Laureles                             16.400000     86.800000            176.40
## Manila                               10.400000     78.000000            264.40
## Ocho de Marzo                         1.600000      2.600000              3.75
## Oleoducto                             2.000000     11.200000             15.40
## Palmitas Sector Central               0.000000      1.000000              2.00
## Perpetuo Socorro                     41.200000    249.600000            554.40
## Prado                                29.400000    122.600000            157.20
## San Benito                           87.600000    127.000000            412.20
## San Diego                            15.600000     53.800000            197.00
## Santa Fé                             30.400000    169.600000            275.60
## Santa Rosa de Lima                    1.333333      1.333333              1.50
## Suburbano La Palma-El Patio           1.000000      2.333333              3.00
## Villa Nueva                          81.400000    113.800000            329.60
##                               Choque_MUERTO Atropello_MUERTO Tasa_Choque_HERIDO
## Andalucía                          3.000000         1.000000          0.2968750
## Barrio Colón                       1.000000         2.400000          0.2283798
## Belén                              1.000000         1.333333          0.2534704
## Cabecera San Antonio de Prado      3.000000         4.000000          0.3861386
## Campo Amor                         3.750000         2.500000          0.3150560
## Caribe                             2.200000         3.750000          0.3240678
## Castilla                           1.800000         2.000000          0.4944212
## Cementerio Universal               0.000000         1.000000          0.2933333
## Corazón de Jesús                   1.750000         4.000000          0.2502191
## Cristo Rey                         1.666667         2.800000          0.3436177
## El Chagualo                        1.666667         3.000000          0.3367260
## El Nogal-Los Almendros             2.000000         1.000000          0.3143939
## Guayaquil                          2.000000         5.200000          0.2185326
## Jesús Nazareno                     3.500000         2.400000          0.3620818
## Juan XXIII La Quiebra              2.000000         0.000000          0.2500000
## La Candelaria                      2.000000         5.000000          0.1717721
## La Cuchilla                        1.000000         0.000000          0.0000000
## La Frisola                         1.000000         0.000000          0.0000000
## Laureles                           2.500000         2.666667          0.3285390
## Manila                             1.000000         1.500000          0.2275379
## Ocho de Marzo                      1.000000         1.000000          0.4482759
## Oleoducto                          2.000000         1.500000          0.4028777
## Palmitas Sector Central            2.000000         1.000000          0.4444444
## Perpetuo Socorro                   2.800000         2.250000          0.3093704
## Prado                              2.500000         2.250000          0.4366097
## San Benito                         1.500000         4.800000          0.2350111
## San Diego                          4.000000         1.000000          0.2138315
## Santa Fé                           3.250000         2.000000          0.3787405
## Santa Rosa de Lima                 1.000000         0.000000          0.6060606
## Suburbano La Palma-El Patio        1.000000         1.000000          0.6666667
## Villa Nueva                        1.500000         3.000000          0.2563063
##                               Tasa_Choque_MUERTO Tasa_Atropello_MUERTO grupo
## Andalucía                            0.117187500            0.08771930     0
## Barrio Colón                         0.001764914            0.03870968     0
## Belén                                0.002570694            0.03300330     0
## Cabecera San Antonio de Prado        0.013501350            0.08000000     0
## Campo Amor                           0.005680097            0.05555556     0
## Caribe                               0.003728814            0.10838150     0
## Castilla                             0.006276151            0.03003003     0
## Cementerio Universal                 0.000000000            0.66666667     0
## Corazón de Jesús                     0.003834356            0.09090909     0
## Cristo Rey                           0.005041339            0.08588957     0
## El Chagualo                          0.007068137            0.08620690     0
## El Nogal-Los Almendros               0.037878788            0.50000000     0
## Guayaquil                            0.003162555            0.07162534     0
## Jesús Nazareno                       0.013011152            0.06741573     0
## Juan XXIII La Quiebra                0.138888889            0.00000000     0
## La Candelaria                        0.002862869            0.02747253     0
## La Cuchilla                          1.000000000            0.00000000     0
## La Frisola                           1.000000000            0.00000000     0
## Laureles                             0.009462528            0.14814815     0
## Manila                               0.002917153            0.13636364     0
## Ocho de Marzo                        0.172413793            0.55555556     0
## Oleoducto                            0.071942446            0.66666667     0
## Palmitas Sector Central              0.888888889            1.00000000     0
## Perpetuo Socorro                     0.003470501            0.05232558     0
## Prado                                0.008903134            0.07211538     0
## San Benito                           0.002775722            0.05194805     0
## San Diego                            0.015898251            0.06250000     0
## Santa Fé                             0.007257704            0.06250000     0
## Santa Rosa de Lima                   0.454545455            0.00000000     0
## Suburbano La Palma-El Patio          0.285714286            1.00000000     0
## Villa Nueva                          0.003378378            0.03554502     0

Vemos que en este grupo existen barrios con alta accidentalidad, así como barrios con muy baja accidentalidad, por lo que es necesario dividirlos y asignarlos en conjuntos de datos más coherentes.

Revisaremos los demas grupos y luego dividiremos este primer grupo.

## Segundo grupo
barrios_mean2[barrios_mean2$grupo == 1,]
##                                Atropello_HERIDO Choque_HERIDO Choque_SOLO DAÑOS
## Aguas Frias                            3.200000      3.666667          2.500000
## Aldea Pablo VI                         2.750000      1.666667          2.250000
## Altamira                               9.400000     36.800000         54.400000
## Altos del Poblado                      2.000000      8.800000         19.200000
## Area De Expansion Altavista            3.666667      2.750000          2.000000
## Area De Expansion Belen Rincon         1.000000      2.000000          1.333333
## Area De Expansion El Noral             1.000000      1.333333          1.333333
## Asomadera No. 2                        2.600000     27.600000         89.000000
## Asomadera No. 3                        1.000000      2.250000          3.750000
## Astorga                                3.400000     15.400000         43.600000
## Barro Blanco                           0.000000      0.000000          1.000000
## Batallón Girardot                      2.000000      1.000000          1.000000
## Buenos Aires                          16.400000     61.200000         73.400000
## Buga Patio Bonito                      1.000000      1.600000          3.800000
## Carpinelo                              8.200000      2.750000          4.000000
## Eduardo Santos                         1.250000      1.750000          2.400000
## El Cerro                               0.000000      0.000000          1.000000
## El Corazon El Morro                    1.500000      1.500000          0.000000
## El Diamante No. 2                      2.250000      9.400000         34.200000
## El Pesebre                             5.600000     10.400000         16.200000
## El Picacho                             0.000000      0.000000          1.000000
## El Socorro                             3.400000      2.500000          2.400000
## El Triunfo                             2.400000      1.800000          3.000000
## El Vergel                              1.000000      1.500000          2.000000
## Ferrini                                5.800000     12.800000         27.600000
## Francisco Antonio Zea                 13.400000     25.000000         32.400000
## Gerona                                11.200000     21.200000         25.800000
## Hospital San Vicente de Paúl           4.000000      6.400000         17.800000
## Juan Pablo II                          2.200000      1.000000          1.600000
## La Avanzada                            2.600000      5.000000          2.600000
## La Esperanza No. 2                     7.600000      3.600000          5.800000
## La Frontera                           11.600000      9.000000         17.800000
## La Hondonada                           1.333333      6.600000         11.000000
## La Ladera                              1.600000      3.600000          6.200000
## La Loma                                1.250000      2.333333          1.750000
## La Loma Oriental                       1.000000      1.500000          2.000000
## La Mansión                             6.000000     21.200000         18.600000
## La Oculta                              1.000000      1.333333          1.666667
## La Sierra                              1.000000      1.000000          1.000000
## La Verde                               1.000000      2.333333          5.000000
## Lalinde                                2.000000      7.400000         16.600000
## Las Estancias                         14.000000      9.600000         10.800000
## Las Independencias                     6.000000      1.666667          3.400000
## Las Lomas No.1                         2.600000     23.200000         72.000000
## Las Lomas No.2                         3.000000     10.000000         33.600000
## Las Mercedes                           8.400000     21.800000         37.000000
## Los Balsos No.2                        3.200000     16.000000        108.800000
## Los Naranjos                           4.250000     19.000000         80.000000
## Llanaditas                             5.000000      2.333333          2.600000
## Metropolitano                          2.000000      2.000000          1.500000
## Mirador del Doce                       2.400000      1.400000          2.200000
## Miravalle                              3.333333      5.200000          8.200000
## Monteclaro                             2.200000      2.600000          4.600000
## Moscú No. 1                           14.200000     12.000000         23.200000
## Pajarito                               1.600000      3.600000          4.800000
## Palenque                               9.600000     22.400000         38.600000
## Pedregal Bajo                          3.000000      6.000000          4.250000
## Picachito                              4.250000      2.250000          2.000000
## Piedras Blancas Represa                0.000000      0.000000          1.000000
## Potrerito                              1.000000      0.000000          0.000000
## San Antonio                            2.000000      1.500000          1.500000
## San José de la Montaña                 0.000000      0.000000          1.000000
## San José la Cima No. 1                 3.000000      1.333333          1.250000
## San José la Cima No.2                  1.333333      0.000000          1.000000
## San Martín de Porres                  18.400000     18.000000         27.800000
## San Pablo                             23.200000     14.800000         18.400000
## Santa Elena Sector Central             0.000000      1.000000          3.000000
## Santa Teresita                         2.400000     14.800000         24.800000
## SUBURB El Plan                         8.750000      7.400000         11.750000
## Suburbano Chacaltaya                   0.000000      1.000000          1.666667
## Suburbano El Llano                     2.000000      1.000000          1.500000
## Suburbano el Tesoro                    0.000000      1.333333          3.200000
## Suburbano Mirador del Poblado          0.000000      2.400000          4.800000
## Suburbano Pedregal alto                1.000000      1.333333          1.000000
## Suburbano Santa Elena Central          0.000000      1.000000          1.000000
## Suburbano Travesias                    4.250000      3.200000          4.000000
## Trece de Noviembre                     2.250000      1.000000          3.000000
## Versalles No. 2                        3.000000      2.000000          2.200000
## Villa Flora                            4.000000      9.200000         11.200000
## Villa Liliam                           7.400000      3.200000          4.200000
## Villa Turbay                           2.666667      1.750000          1.750000
## Yolombo                                0.000000      1.000000          6.000000
##                                Choque_MUERTO Atropello_MUERTO
## Aguas Frias                                0                0
## Aldea Pablo VI                             0                0
## Altamira                                   0                0
## Altos del Poblado                          0                0
## Area De Expansion Altavista                0                0
## Area De Expansion Belen Rincon             0                0
## Area De Expansion El Noral                 0                0
## Asomadera No. 2                            0                0
## Asomadera No. 3                            0                0
## Astorga                                    0                0
## Barro Blanco                               0                0
## Batallón Girardot                          0                0
## Buenos Aires                               0                0
## Buga Patio Bonito                          0                0
## Carpinelo                                  0                0
## Eduardo Santos                             0                0
## El Cerro                                   0                0
## El Corazon El Morro                        0                0
## El Diamante No. 2                          0                0
## El Pesebre                                 0                0
## El Picacho                                 0                0
## El Socorro                                 0                0
## El Triunfo                                 0                0
## El Vergel                                  0                0
## Ferrini                                    0                0
## Francisco Antonio Zea                      0                0
## Gerona                                     0                0
## Hospital San Vicente de Paúl               0                0
## Juan Pablo II                              0                0
## La Avanzada                                0                0
## La Esperanza No. 2                         0                0
## La Frontera                                0                0
## La Hondonada                               0                0
## La Ladera                                  0                0
## La Loma                                    0                0
## La Loma Oriental                           0                0
## La Mansión                                 0                0
## La Oculta                                  0                0
## La Sierra                                  0                0
## La Verde                                   0                0
## Lalinde                                    0                0
## Las Estancias                              0                0
## Las Independencias                         0                0
## Las Lomas No.1                             0                0
## Las Lomas No.2                             0                0
## Las Mercedes                               0                0
## Los Balsos No.2                            0                0
## Los Naranjos                               0                0
## Llanaditas                                 0                0
## Metropolitano                              0                0
## Mirador del Doce                           0                0
## Miravalle                                  0                0
## Monteclaro                                 0                0
## Moscú No. 1                                0                0
## Pajarito                                   0                0
## Palenque                                   0                0
## Pedregal Bajo                              0                0
## Picachito                                  0                0
## Piedras Blancas Represa                    0                0
## Potrerito                                  0                0
## San Antonio                                0                0
## San José de la Montaña                     0                0
## San José la Cima No. 1                     0                0
## San José la Cima No.2                      0                0
## San Martín de Porres                       0                0
## San Pablo                                  0                0
## Santa Elena Sector Central                 0                0
## Santa Teresita                             0                0
## SUBURB El Plan                             0                0
## Suburbano Chacaltaya                       0                0
## Suburbano El Llano                         0                0
## Suburbano el Tesoro                        0                0
## Suburbano Mirador del Poblado              0                0
## Suburbano Pedregal alto                    0                0
## Suburbano Santa Elena Central              0                0
## Suburbano Travesias                        0                0
## Trece de Noviembre                         0                0
## Versalles No. 2                            0                0
## Villa Flora                                0                0
## Villa Liliam                               0                0
## Villa Turbay                               0                0
## Yolombo                                    0                0
##                                Tasa_Choque_HERIDO Tasa_Choque_MUERTO
## Aguas Frias                             0.8730159                  0
## Aldea Pablo VI                          0.5952381                  0
## Altamira                                0.4035088                  0
## Altos del Poblado                       0.3142857                  0
## Area De Expansion Altavista             0.8088235                  0
## Area De Expansion Belen Rincon          1.0000000                  0
## Area De Expansion El Noral              0.5000000                  0
## Asomadera No. 2                         0.2367067                  0
## Asomadera No. 3                         0.3750000                  0
## Astorga                                 0.2610169                  0
## Barro Blanco                            0.0000000                  0
## Batallón Girardot                       0.7500000                  0
## Buenos Aires                            0.4546805                  0
## Buga Patio Bonito                       0.2962963                  0
## Carpinelo                               0.4435484                  0
## Eduardo Santos                          0.4605263                  0
## El Cerro                                0.0000000                  0
## El Corazon El Morro                     1.0000000                  0
## El Diamante No. 2                       0.2155963                  0
## El Pesebre                              0.3909774                  0
## El Picacho                              0.0000000                  0
## El Socorro                              0.5681818                  0
## El Triunfo                              0.5000000                  0
## El Vergel                               0.8333333                  0
## Ferrini                                 0.3168317                  0
## Francisco Antonio Zea                   0.4355401                  0
## Gerona                                  0.4510638                  0
## Hospital San Vicente de Paúl            0.2644628                  0
## Juan Pablo II                           0.5000000                  0
## La Avanzada                             0.6578947                  0
## La Esperanza No. 2                      0.3829787                  0
## La Frontera                             0.3358209                  0
## La Hondonada                            0.3750000                  0
## La Ladera                               0.3673469                  0
## La Loma                                 0.8333333                  0
## La Loma Oriental                        0.6428571                  0
## La Mansión                              0.5326633                  0
## La Oculta                               0.5925926                  0
## La Sierra                               1.0000000                  0
## La Verde                                0.4320988                  0
## Lalinde                                 0.3083333                  0
## Las Estancias                           0.4705882                  0
## Las Independencias                      0.3787879                  0
## Las Lomas No.1                          0.2436975                  0
## Las Lomas No.2                          0.2293578                  0
## Las Mercedes                            0.3707483                  0
## Los Balsos No.2                         0.1282051                  0
## Los Naranjos                            0.1919192                  0
## Llanaditas                              0.5833333                  0
## Metropolitano                           0.8333333                  0
## Mirador del Doce                        0.3888889                  0
## Miravalle                               0.3880597                  0
## Monteclaro                              0.3611111                  0
## Moscú No. 1                             0.3409091                  0
## Pajarito                                0.4285714                  0
## Palenque                                0.3672131                  0
## Pedregal Bajo                           0.5853659                  0
## Picachito                               0.5294118                  0
## Piedras Blancas Represa                 0.0000000                  0
## Potrerito                               0.0000000                  0
## San Antonio                             0.8333333                  0
## San José de la Montaña                  0.0000000                  0
## San José la Cima No. 1                  0.7407407                  0
## San José la Cima No.2                   0.0000000                  0
## San Martín de Porres                    0.3930131                  0
## San Pablo                               0.4457831                  0
## Santa Elena Sector Central              0.3571429                  0
## Santa Teresita                          0.3737374                  0
## SUBURB El Plan                          0.4404762                  0
## Suburbano Chacaltaya                    0.5000000                  0
## Suburbano El Llano                      0.5000000                  0
## Suburbano el Tesoro                     0.3333333                  0
## Suburbano Mirador del Poblado           0.3333333                  0
## Suburbano Pedregal alto                 0.8000000                  0
## Suburbano Santa Elena Central           1.0000000                  0
## Suburbano Travesias                     0.4444444                  0
## Trece de Noviembre                      0.4444444                  0
## Versalles No. 2                         0.7692308                  0
## Villa Flora                             0.4509804                  0
## Villa Liliam                            0.4324324                  0
## Villa Turbay                            0.6250000                  0
## Yolombo                                 0.1428571                  0
##                                Tasa_Atropello_MUERTO grupo
## Aguas Frias                                        0     1
## Aldea Pablo VI                                     0     1
## Altamira                                           0     1
## Altos del Poblado                                  0     1
## Area De Expansion Altavista                        0     1
## Area De Expansion Belen Rincon                     0     1
## Area De Expansion El Noral                         0     1
## Asomadera No. 2                                    0     1
## Asomadera No. 3                                    0     1
## Astorga                                            0     1
## Barro Blanco                                       0     1
## Batallón Girardot                                  0     1
## Buenos Aires                                       0     1
## Buga Patio Bonito                                  0     1
## Carpinelo                                          0     1
## Eduardo Santos                                     0     1
## El Cerro                                           0     1
## El Corazon El Morro                                0     1
## El Diamante No. 2                                  0     1
## El Pesebre                                         0     1
## El Picacho                                         0     1
## El Socorro                                         0     1
## El Triunfo                                         0     1
## El Vergel                                          0     1
## Ferrini                                            0     1
## Francisco Antonio Zea                              0     1
## Gerona                                             0     1
## Hospital San Vicente de Paúl                       0     1
## Juan Pablo II                                      0     1
## La Avanzada                                        0     1
## La Esperanza No. 2                                 0     1
## La Frontera                                        0     1
## La Hondonada                                       0     1
## La Ladera                                          0     1
## La Loma                                            0     1
## La Loma Oriental                                   0     1
## La Mansión                                         0     1
## La Oculta                                          0     1
## La Sierra                                          0     1
## La Verde                                           0     1
## Lalinde                                            0     1
## Las Estancias                                      0     1
## Las Independencias                                 0     1
## Las Lomas No.1                                     0     1
## Las Lomas No.2                                     0     1
## Las Mercedes                                       0     1
## Los Balsos No.2                                    0     1
## Los Naranjos                                       0     1
## Llanaditas                                         0     1
## Metropolitano                                      0     1
## Mirador del Doce                                   0     1
## Miravalle                                          0     1
## Monteclaro                                         0     1
## Moscú No. 1                                        0     1
## Pajarito                                           0     1
## Palenque                                           0     1
## Pedregal Bajo                                      0     1
## Picachito                                          0     1
## Piedras Blancas Represa                            0     1
## Potrerito                                          0     1
## San Antonio                                        0     1
## San José de la Montaña                             0     1
## San José la Cima No. 1                             0     1
## San José la Cima No.2                              0     1
## San Martín de Porres                               0     1
## San Pablo                                          0     1
## Santa Elena Sector Central                         0     1
## Santa Teresita                                     0     1
## SUBURB El Plan                                     0     1
## Suburbano Chacaltaya                               0     1
## Suburbano El Llano                                 0     1
## Suburbano el Tesoro                                0     1
## Suburbano Mirador del Poblado                      0     1
## Suburbano Pedregal alto                            0     1
## Suburbano Santa Elena Central                      0     1
## Suburbano Travesias                                0     1
## Trece de Noviembre                                 0     1
## Versalles No. 2                                    0     1
## Villa Flora                                        0     1
## Villa Liliam                                       0     1
## Villa Turbay                                       0     1
## Yolombo                                            0     1
## Tercer grupo
barrios_mean2[barrios_mean2$grupo == 2,]
##                                        Atropello_HERIDO Choque_HERIDO
## Alejandría                                     3.000000     15.600000
## Alejandro Echavarría                          17.000000     40.000000
## Alfonso López                                 28.200000     52.400000
## Altavista                                     12.000000     10.800000
## Altavista Sector Central                       4.600000      4.200000
## Antonio Nariño                                 8.800000     10.200000
## Aranjuez                                      10.200000     16.600000
## Area de Expansion Altos de Calasanz            1.750000      2.200000
## Área de Expansión Pajarito                    17.600000     35.600000
## Área de Expansión San Antonio de Prado         2.750000      5.000000
## Asomadera No. 1                                5.400000     18.400000
## B. Cerro  El Volador                           2.250000      6.400000
## Barrio Caicedo                                19.800000     29.800000
## Barrio Colombia                               13.600000     52.600000
## Barrio de Jesús                                8.200000     10.000000
## Belalcázar                                     6.200000     35.000000
## Belencito                                      4.400000     12.800000
## Berlin                                        32.600000     33.000000
## Betania                                        4.400000      3.800000
## Bolivariana                                    8.200000     52.600000
## Bomboná No. 1                                 16.200000     61.200000
## Bosques de San Pablo                           8.400000     23.000000
## Boston                                        42.800000    132.200000
## Brasilia                                      15.400000     32.000000
## Cabecera Urbana San Cristobal                 20.000000     21.800000
## Calasanz                                      10.800000     42.400000
## Calle Nueva                                   24.200000     50.800000
## Campo Alegre                                  11.400000     35.400000
## Campo Valdés No. 1                            38.000000     81.000000
## Campo Valdés No. 2                            41.800000     56.800000
## Carlos E. Restrepo                            26.200000    128.200000
## Castropol                                     10.400000     53.800000
## Cataluña                                       8.400000     12.400000
## Centro Administrativo                          5.200000     18.200000
## Cerro Nutibara                                 6.600000     39.600000
## Cuarta Brigada                                20.800000     65.600000
## Cucaracho                                     14.200000     52.000000
## Diego Echavarría                               1.000000      7.600000
## Doce de Octubre No.2                          23.000000     30.200000
## El Corazón                                     4.000000      5.600000
## El Danubio                                     6.000000     27.000000
## El Diamante                                   37.600000     68.200000
## El Pinal                                      23.200000     16.000000
## El Poblado                                    10.800000     35.400000
## El Progreso No.2                               4.600000      4.400000
## El Rodeo                                       3.800000      7.600000
## El Salado                                      6.800000      5.800000
## El Salvador                                   13.800000     22.200000
## El Tesoro                                      2.000000     20.000000
## El Velódromo                                   7.000000     45.600000
## Enciso                                        18.400000     42.400000
## Estación Villa                                35.800000     35.600000
## Facultad de Minas U. Nacional                  8.000000     42.000000
## Fátima                                         8.000000     33.400000
## Florida Nueva                                 19.600000     39.000000
## Girardot                                      17.200000     49.000000
## Granada                                        4.400000     18.400000
## Granizal                                      16.600000      6.000000
## Guayabal                                      17.800000     72.600000
## Héctor Abad Gómez                              7.800000     52.200000
## Kennedy                                       38.000000     31.000000
## La Aguacatala                                  9.000000     82.200000
## La Castellana                                  8.000000     42.400000
## La Colina                                     11.000000     21.800000
## La Cruz                                        6.800000      3.400000
## La Esperanza                                  30.000000     29.000000
## La Floresta                                   13.800000     38.400000
## La Francia                                    12.800000      9.400000
## La Gloria                                     11.600000     53.600000
## La Isla                                       16.000000      7.400000
## La Libertad                                    8.400000      7.200000
## La Milagrosa                                  10.600000     31.200000
## La mota                                        7.200000     26.000000
## La Piñuela                                    10.400000     18.000000
## La Pradera                                    11.000000     14.600000
## La Rosa                                       10.400000     13.400000
## La Salle                                      26.800000     20.600000
## Las Acacias                                   16.200000     70.400000
## Las Brisas                                     8.400000     32.400000
## Las Esmeraldas                                12.400000     15.800000
## Las Granjas                                   52.000000     47.200000
## Las Palmas                                    10.000000     29.000000
## Las Violetas                                  14.200000     13.000000
## Lorena                                        15.400000     51.200000
## Loreto                                        21.000000     22.600000
## Los Alcázares                                  7.400000     24.400000
## Los Alpes                                      9.600000     24.600000
## Los Balsos No.1                                1.666667     11.600000
## Los Cerros El Vergel                          10.000000     18.800000
## Los Colores                                   35.400000    108.200000
## Los Conquistadores                            26.400000    149.600000
## Los Mangos                                    20.600000     21.400000
## Los Pinos                                     15.400000     41.000000
## Manrique Central No. 1                        18.400000     65.800000
## Manrique Central No. 2                        18.600000     39.600000
## Manrique Oriental                             28.800000     53.600000
## Media Luna                                     1.666667      4.000000
## Miraflores                                     8.600000     33.200000
## Miranda                                       27.400000     53.800000
## Moravia                                       39.000000     35.800000
## Naranjal                                      28.400000    104.200000
## Nueva Villa de Aburrá                          4.750000      9.400000
## Nuevos Conquistadores                          6.000000      2.250000
## Olaya Herrera                                  8.800000      6.600000
## Pablo VI                                       5.000000      3.666667
## Palermo                                       11.600000     19.200000
## Parque Juan Pablo II                           7.800000     41.200000
## Parque Norte                                  26.200000     42.600000
## Patio Bonito                                   7.400000     49.800000
## Pedregal                                      30.600000     43.600000
## Playón de Los Comuneros                       11.200000     12.800000
## Plaza de Ferias                                5.600000     27.800000
## Robledo                                       16.800000     44.800000
## Rosales                                       17.200000    128.800000
## San Bernardo                                  23.000000     61.400000
## San Germán                                     9.600000     32.000000
## San Isidro                                    24.000000     46.600000
## San Javier No.1                               23.200000     41.600000
## San Joaquín                                   13.600000     53.200000
## San Lucas                                      1.800000      3.200000
## San Miguel                                    13.000000     60.400000
## San Pedro                                     16.400000     43.400000
## Santa Cruz                                    17.400000     19.600000
## Santa Inés                                    27.400000     28.600000
## Santa Lucía                                   11.000000     12.400000
## Santa María de los Ángeles                     4.000000     34.200000
## Santa Mónica                                   3.800000     24.200000
## Santander                                     23.000000     17.600000
## Santo Domingo Savio No. 1                     39.600000     10.600000
## Sevilla                                       25.000000     60.000000
## Simón Bolívar                                  6.500000     33.600000
## Suburbano Altavista                            2.800000      4.800000
## Sucre                                         15.400000     48.000000
## Suramericana                                  14.200000     68.600000
## Tejelo                                        21.000000     32.000000
## Tenche                                         7.600000     57.000000
## Terminal de Transporte                        29.600000    108.400000
## Toscana                                        9.200000     43.800000
## Tricentenario                                 10.400000     56.200000
## Trinidad                                      29.600000     70.200000
## U.D. Atanasio Girardot                         7.800000     18.200000
## U.P.B.                                         3.400000     10.200000
## Universidad de Antioquia                       9.800000     48.200000
## Universidad Nacional                          21.400000    130.800000
## Veinte de Julio                               13.200000     17.200000
## Versalles No. 1                               25.000000     13.600000
## Villa Carlota                                 14.600000    107.600000
## Villa del Socorro                             19.600000     16.200000
## Villa Guadalupe                               20.400000     13.600000
## Villa Niza                                     4.400000      4.000000
## Villatina                                     20.000000     14.200000
##                                        Choque_SOLO DAÑOS Choque_MUERTO
## Alejandría                                          57.8      1.000000
## Alejandro Echavarría                                50.8      1.000000
## Alfonso López                                       79.4      1.500000
## Altavista                                           22.0      1.000000
## Altavista Sector Central                             6.0      1.000000
## Antonio Nariño                                       9.8      1.000000
## Aranjuez                                            19.2      1.000000
## Area de Expansion Altos de Calasanz                  5.2      1.000000
## Área de Expansión Pajarito                          36.6      1.666667
## Área de Expansión San Antonio de Prado               3.8      1.000000
## Asomadera No. 1                                     53.2      1.000000
## B. Cerro  El Volador                                 8.2      1.000000
## Barrio Caicedo                                      54.2      1.000000
## Barrio Colombia                                    132.6      1.000000
## Barrio de Jesús                                     17.2      1.000000
## Belalcázar                                          51.2      1.000000
## Belencito                                            9.8      1.000000
## Berlin                                              53.2      2.000000
## Betania                                              7.8      1.000000
## Bolivariana                                         91.8      1.000000
## Bomboná No. 1                                      132.6      1.000000
## Bosques de San Pablo                                62.8      1.000000
## Boston                                             223.2      1.000000
## Brasilia                                            26.4      1.500000
## Cabecera Urbana San Cristobal                       31.0      1.000000
## Calasanz                                            95.2      1.000000
## Calle Nueva                                        170.8      1.000000
## Campo Alegre                                        36.4      1.500000
## Campo Valdés No. 1                                  61.4      1.666667
## Campo Valdés No. 2                                  32.8      1.666667
## Carlos E. Restrepo                                 317.2      2.000000
## Castropol                                          132.2      2.000000
## Cataluña                                            28.0      1.000000
## Centro Administrativo                               45.6      1.000000
## Cerro Nutibara                                      69.8      1.333333
## Cuarta Brigada                                     123.2      1.000000
## Cucaracho                                           53.2      1.500000
## Diego Echavarría                                    16.8      1.000000
## Doce de Octubre No.2                                28.0      1.000000
## El Corazón                                           4.6      1.000000
## El Danubio                                          29.4      1.000000
## El Diamante                                         78.4      1.000000
## El Pinal                                            42.8      1.000000
## El Poblado                                         172.0      1.000000
## El Progreso No.2                                     7.6      1.000000
## El Rodeo                                            12.8      1.000000
## El Salado                                           10.4      1.000000
## El Salvador                                         38.6      1.000000
## El Tesoro                                           60.0      1.000000
## El Velódromo                                        66.6      1.000000
## Enciso                                              36.4      2.000000
## Estación Villa                                      97.6      1.333333
## Facultad de Minas U. Nacional                       92.8      1.000000
## Fátima                                              54.4      1.500000
## Florida Nueva                                       84.6      2.500000
## Girardot                                            60.2      2.000000
## Granada                                             32.8      1.000000
## Granizal                                            22.6      1.333333
## Guayabal                                           174.4      1.000000
## Héctor Abad Gómez                                   73.6      1.500000
## Kennedy                                             48.0      1.000000
## La Aguacatala                                      231.6      2.000000
## La Castellana                                       78.6      1.000000
## La Colina                                           53.0      1.000000
## La Cruz                                              4.8      1.000000
## La Esperanza                                        22.4      1.000000
## La Floresta                                         69.6      1.000000
## La Francia                                          18.2      1.000000
## La Gloria                                           94.8      1.000000
## La Isla                                             14.2      1.000000
## La Libertad                                         17.0      1.000000
## La Milagrosa                                        39.2      1.500000
## La mota                                             50.2      1.000000
## La Piñuela                                          18.0      1.000000
## La Pradera                                          19.6      1.000000
## La Rosa                                             11.8      1.000000
## La Salle                                            21.0      1.000000
## Las Acacias                                        174.8      1.500000
## Las Brisas                                          54.2      1.000000
## Las Esmeraldas                                      27.4      1.500000
## Las Granjas                                         56.2      2.750000
## Las Palmas                                          60.4      1.666667
## Las Violetas                                        26.4      1.000000
## Lorena                                              95.2      1.000000
## Loreto                                              39.8      1.000000
## Los Alcázares                                       33.4      1.000000
## Los Alpes                                           36.4      1.000000
## Los Balsos No.1                                     42.0      1.000000
## Los Cerros El Vergel                                20.2      2.000000
## Los Colores                                        171.2      1.000000
## Los Conquistadores                                 361.0      2.250000
## Los Mangos                                          28.8      1.000000
## Los Pinos                                           93.0      1.000000
## Manrique Central No. 1                              64.6      2.000000
## Manrique Central No. 2                              34.8      2.000000
## Manrique Oriental                                   50.0      1.000000
## Media Luna                                           4.0      1.500000
## Miraflores                                          36.0      1.000000
## Miranda                                             81.4      2.000000
## Moravia                                             62.4      1.500000
## Naranjal                                           305.2      1.800000
## Nueva Villa de Aburrá                               18.8      1.000000
## Nuevos Conquistadores                                5.2      1.000000
## Olaya Herrera                                        8.8      1.000000
## Pablo VI                                             5.4      1.000000
## Palermo                                             29.2      1.000000
## Parque Juan Pablo II                                56.6      1.500000
## Parque Norte                                        71.6      1.000000
## Patio Bonito                                       143.2      1.000000
## Pedregal                                            35.0      1.000000
## Playón de Los Comuneros                             16.0      1.000000
## Plaza de Ferias                                     35.4      1.000000
## Robledo                                             62.4      1.000000
## Rosales                                            176.0      1.250000
## San Bernardo                                        86.8      3.000000
## San Germán                                          58.0      1.000000
## San Isidro                                          46.4      1.333333
## San Javier No.1                                     47.2      1.000000
## San Joaquín                                        100.2      1.333333
## San Lucas                                           29.0      1.000000
## San Miguel                                          48.0      1.500000
## San Pedro                                           86.0      1.000000
## Santa Cruz                                          18.6      1.000000
## Santa Inés                                          33.0      1.500000
## Santa Lucía                                         19.0      1.000000
## Santa María de los Ángeles                          99.4      2.000000
## Santa Mónica                                        24.2      1.000000
## Santander                                           15.6      1.000000
## Santo Domingo Savio No. 1                           25.6      1.000000
## Sevilla                                            119.4      1.250000
## Simón Bolívar                                       39.4      1.000000
## Suburbano Altavista                                  3.6      1.000000
## Sucre                                               44.4      1.000000
## Suramericana                                       178.0      1.500000
## Tejelo                                              34.6      3.000000
## Tenche                                              89.2      2.000000
## Terminal de Transporte                             275.6      1.800000
## Toscana                                             58.8      2.333333
## Tricentenario                                       84.2      1.500000
## Trinidad                                           113.6      1.000000
## U.D. Atanasio Girardot                              35.0      1.000000
## U.P.B.                                              47.6      1.000000
## Universidad de Antioquia                           103.8      1.666667
## Universidad Nacional                               215.0      1.500000
## Veinte de Julio                                     13.8      1.500000
## Versalles No. 1                                     30.6      1.000000
## Villa Carlota                                      248.4      2.000000
## Villa del Socorro                                   33.0      1.000000
## Villa Guadalupe                                     19.8      1.000000
## Villa Niza                                           6.2      1.000000
## Villatina                                           27.2      1.000000
##                                        Atropello_MUERTO Tasa_Choque_HERIDO
## Alejandría                                     0.000000         0.21195652
## Alejandro Echavarría                           1.000000         0.43859649
## Alfonso López                                  1.000000         0.39577039
## Altavista                                      1.000000         0.32530120
## Altavista Sector Central                       0.000000         0.38888889
## Antonio Nariño                                 0.000000         0.50495050
## Aranjuez                                       0.000000         0.46111111
## Area de Expansion Altos de Calasanz            0.000000         0.28947368
## Área de Expansión Pajarito                     1.000000         0.48633880
## Área de Expansión San Antonio de Prado         0.000000         0.54347826
## Asomadera No. 1                                1.000000         0.25626741
## B. Cerro  El Volador                           0.000000         0.43243243
## Barrio Caicedo                                 1.000000         0.35224586
## Barrio Colombia                                1.000000         0.28371090
## Barrio de Jesús                                1.000000         0.35971223
## Belalcázar                                     1.000000         0.40415704
## Belencito                                      1.000000         0.56140351
## Berlin                                         1.000000         0.38106236
## Betania                                        1.000000         0.32203390
## Bolivariana                                    1.000000         0.36376210
## Bomboná No. 1                                  1.000000         0.31481481
## Bosques de San Pablo                           0.000000         0.26744186
## Boston                                         2.000000         0.37155705
## Brasilia                                       1.000000         0.54237288
## Cabecera Urbana San Cristobal                  1.333333         0.40977444
## Calasanz                                       1.500000         0.30769231
## Calle Nueva                                    1.000000         0.22862286
## Campo Alegre                                   0.000000         0.48895028
## Campo Valdés No. 1                             1.500000         0.56485356
## Campo Valdés No. 2                             1.000000         0.62693157
## Carlos E. Restrepo                             2.000000         0.28757290
## Castropol                                      1.500000         0.28862661
## Cataluña                                       0.000000         0.30541872
## Centro Administrativo                          1.000000         0.28437500
## Cerro Nutibara                                 1.000000         0.35934664
## Cuarta Brigada                                 1.333333         0.34708995
## Cucaracho                                      0.000000         0.49149338
## Diego Echavarría                               0.000000         0.30894309
## Doce de Octubre No.2                           1.000000         0.51535836
## El Corazón                                     1.000000         0.53846154
## El Danubio                                     1.000000         0.47535211
## El Diamante                                    1.000000         0.46457766
## El Pinal                                       1.000000         0.27027027
## El Poblado                                     1.000000         0.17052023
## El Progreso No.2                               1.000000         0.36065574
## El Rodeo                                       0.000000         0.36893204
## El Salado                                      0.000000         0.35365854
## El Salvador                                    1.000000         0.36393443
## El Tesoro                                      0.000000         0.24937656
## El Velódromo                                   1.000000         0.40569395
## Enciso                                         2.000000         0.53000000
## Estación Villa                                 2.666667         0.26567164
## Facultad de Minas U. Nacional                  1.000000         0.31065089
## Fátima                                         1.000000         0.37782805
## Florida Nueva                                  1.000000         0.31300161
## Girardot                                       1.500000         0.44708029
## Granada                                        0.000000         0.35797665
## Granizal                                       1.500000         0.20408163
## Guayabal                                       2.000000         0.29368932
## Héctor Abad Gómez                              1.666667         0.41102362
## Kennedy                                        0.000000         0.39141414
## La Aguacatala                                  1.000000         0.26062143
## La Castellana                                  1.000000         0.34983498
## La Colina                                      1.500000         0.29066667
## La Cruz                                        0.000000         0.40476190
## La Esperanza                                   1.500000         0.55984556
## La Floresta                                    1.000000         0.35489834
## La Francia                                     0.000000         0.33812950
## La Gloria                                      0.000000         0.36069987
## La Isla                                        1.000000         0.33944954
## La Libertad                                    0.000000         0.29508197
## La Milagrosa                                   1.000000         0.43943662
## La mota                                        1.000000         0.33942559
## La Piñuela                                     1.000000         0.49450549
## La Pradera                                     0.000000         0.42441860
## La Rosa                                        1.000000         0.52755906
## La Salle                                       1.000000         0.49282297
## Las Acacias                                    1.500000         0.28641172
## Las Brisas                                     1.000000         0.37327189
## Las Esmeraldas                                 1.000000         0.36073059
## Las Granjas                                    1.000000         0.44696970
## Las Palmas                                     0.000000         0.32079646
## Las Violetas                                   1.000000         0.32663317
## Lorena                                         1.666667         0.34877384
## Loreto                                         1.500000         0.36102236
## Los Alcázares                                  1.000000         0.41780822
## Los Alpes                                      1.000000         0.40196078
## Los Balsos No.1                                0.000000         0.21402214
## Los Cerros El Vergel                           1.000000         0.47715736
## Los Colores                                    1.600000         0.38642857
## Los Conquistadores                             1.500000         0.29195941
## Los Mangos                                     1.000000         0.42292490
## Los Pinos                                      1.000000         0.30460624
## Manrique Central No. 1                         1.333333         0.50152439
## Manrique Central No. 2                         1.000000         0.52941176
## Manrique Oriental                              1.500000         0.51439539
## Media Luna                                     0.000000         0.51612903
## Miraflores                                     0.000000         0.47701149
## Miranda                                        1.000000         0.39675516
## Moravia                                        1.750000         0.36016097
## Naranjal                                       1.333333         0.25340467
## Nueva Villa de Aburrá                          0.000000         0.33098592
## Nuevos Conquistadores                          0.000000         0.31250000
## Olaya Herrera                                  0.000000         0.42307692
## Pablo VI                                       1.000000         0.47008547
## Palermo                                        0.000000         0.39344262
## Parque Juan Pablo II                           1.000000         0.41616162
## Parque Norte                                   3.000000         0.37237762
## Patio Bonito                                   0.000000         0.25723140
## Pedregal                                       2.000000         0.55189873
## Playón de Los Comuneros                        0.000000         0.43835616
## Plaza de Ferias                                1.000000         0.43710692
## Robledo                                        1.000000         0.41558442
## Rosales                                        2.000000         0.42119032
## San Bernardo                                   1.000000         0.41097724
## San Germán                                     1.000000         0.35398230
## San Isidro                                     1.000000         0.49680171
## San Javier No.1                                1.000000         0.46741573
## San Joaquín                                    1.250000         0.34500649
## San Lucas                                      0.000000         0.09876543
## San Miguel                                     1.000000         0.55412844
## San Pedro                                      2.500000         0.33436055
## Santa Cruz                                     1.000000         0.51041667
## Santa Inés                                     1.000000         0.45980707
## Santa Lucía                                    0.000000         0.39240506
## Santa María de los Ángeles                     1.000000         0.25370920
## Santa Mónica                                   1.000000         0.49794239
## Santander                                      1.250000         0.52694611
## Santo Domingo Savio No. 1                      1.333333         0.29120879
## Sevilla                                        1.500000         0.33259424
## Simón Bolívar                                  1.000000         0.45901639
## Suburbano Altavista                            1.000000         0.55813953
## Sucre                                          0.000000         0.51612903
## Suramericana                                   1.000000         0.27683616
## Tejelo                                         1.000000         0.47619048
## Tenche                                         1.000000         0.38775510
## Terminal de Transporte                         1.400000         0.28097460
## Toscana                                        1.500000         0.42115385
## Tricentenario                                  0.000000         0.39858156
## Trinidad                                       1.500000         0.38069414
## U.D. Atanasio Girardot                         0.000000         0.33955224
## U.P.B.                                         0.000000         0.17586207
## Universidad de Antioquia                       1.000000         0.31503268
## Universidad Nacional                           1.500000         0.37694524
## Veinte de Julio                                2.000000         0.54430380
## Versalles No. 1                                1.000000         0.30493274
## Villa Carlota                                  1.000000         0.30089485
## Villa del Socorro                              2.000000         0.32793522
## Villa Guadalupe                                1.000000         0.40476190
## Villa Niza                                     1.000000         0.41666667
## Villatina                                      0.000000         0.33971292
##                                        Tasa_Choque_MUERTO Tasa_Atropello_MUERTO
## Alejandría                                    0.013586957            0.00000000
## Alejandro Echavarría                          0.010964912            0.05747126
## Alfonso López                                 0.011329305            0.03448276
## Altavista                                     0.030120482            0.08196721
## Altavista Sector Central                      0.092592593            0.00000000
## Antonio Nariño                                0.049504950            0.00000000
## Aranjuez                                      0.027777778            0.00000000
## Area de Expansion Altos de Calasanz           0.131578947            0.00000000
## Área de Expansión Pajarito                    0.022768670            0.05434783
## Área de Expansión San Antonio de Prado        0.108695652            0.00000000
## Asomadera No. 1                               0.013927577            0.17857143
## B. Cerro  El Volador                          0.067567568            0.00000000
## Barrio Caicedo                                0.011820331            0.04950495
## Barrio Colombia                               0.005393743            0.07246377
## Barrio de Jesús                               0.035971223            0.11904762
## Belalcázar                                    0.011547344            0.15625000
## Belencito                                     0.043859649            0.21739130
## Berlin                                        0.023094688            0.03030303
## Betania                                       0.084745763            0.21739130
## Bolivariana                                   0.006915629            0.11627907
## Bomboná No. 1                                 0.005144033            0.05882353
## Bosques de San Pablo                          0.011627907            0.00000000
## Boston                                        0.002810568            0.04464286
## Brasilia                                      0.025423729            0.06410256
## Cabecera Urbana San Cristobal                 0.018796992            0.06410256
## Calasanz                                      0.007256894            0.13157895
## Calle Nueva                                   0.004500450            0.04065041
## Campo Alegre                                  0.020718232            0.00000000
## Campo Valdés No. 1                            0.011622501            0.03886010
## Campo Valdés No. 2                            0.018395879            0.02358491
## Carlos E. Restrepo                            0.004486317            0.07407407
## Castropol                                     0.010729614            0.13636364
## Cataluña                                      0.024630542            0.00000000
## Centro Administrativo                         0.015625000            0.18518519
## Cerro Nutibara                                0.012099214            0.14705882
## Cuarta Brigada                                0.005291005            0.06172840
## Cucaracho                                     0.014177694            0.00000000
## Diego Echavarría                              0.040650407            0.00000000
## Doce de Octubre No.2                          0.017064846            0.04201681
## El Corazón                                    0.096153846            0.23809524
## El Danubio                                    0.017605634            0.16129032
## El Diamante                                   0.006811989            0.02645503
## El Pinal                                      0.016891892            0.04273504
## El Poblado                                    0.004816956            0.08928571
## El Progreso No.2                              0.081967213            0.20833333
## El Rodeo                                      0.048543689            0.00000000
## El Salado                                     0.060975610            0.00000000
## El Salvador                                   0.016393443            0.07042254
## El Tesoro                                     0.012468828            0.00000000
## El Velódromo                                  0.008896797            0.13513514
## Enciso                                        0.025000000            0.10416667
## Estación Villa                                0.009950249            0.07130125
## Facultad de Minas U. Nacional                 0.007396450            0.12195122
## Fátima                                        0.016968326            0.12195122
## Florida Nueva                                 0.020064205            0.05000000
## Girardot                                      0.018248175            0.08152174
## Granada                                       0.019455253            0.00000000
## Granizal                                      0.045351474            0.08720930
## Guayabal                                      0.004045307            0.10526316
## Héctor Abad Gómez                             0.011811024            0.18939394
## Kennedy                                       0.012626263            0.00000000
## La Aguacatala                                 0.006341154            0.10638298
## La Castellana                                 0.008250825            0.12195122
## La Colina                                     0.013333333            0.12931034
## La Cruz                                       0.119047619            0.00000000
## La Esperanza                                  0.019305019            0.04901961
## La Floresta                                   0.009242144            0.06944444
## La Francia                                    0.035971223            0.00000000
## La Gloria                                     0.006729475            0.00000000
## La Isla                                       0.045871560            0.06172840
## La Libertad                                   0.040983607            0.00000000
## La Milagrosa                                  0.021126761            0.08928571
## La mota                                       0.013054830            0.13513514
## La Piñuela                                    0.027472527            0.09259259
## La Pradera                                    0.029069767            0.00000000
## La Rosa                                       0.039370079            0.09433962
## La Salle                                      0.023923445            0.03649635
## Las Acacias                                   0.006102522            0.08928571
## Las Brisas                                    0.011520737            0.10869565
## Las Esmeraldas                                0.034246575            0.07692308
## Las Granjas                                   0.026041667            0.01908397
## Las Palmas                                    0.018436578            0.00000000
## Las Violetas                                  0.025125628            0.06944444
## Lorena                                        0.006811989            0.10162602
## Loreto                                        0.015974441            0.06944444
## Los Alcázares                                 0.017123288            0.12820513
## Los Alpes                                     0.016339869            0.10204082
## Los Balsos No.1                               0.018450185            0.00000000
## Los Cerros El Vergel                          0.050761421            0.09803922
## Los Colores                                   0.003571429            0.04324324
## Los Conquistadores                            0.004391101            0.05434783
## Los Mangos                                    0.019762846            0.04807692
## Los Pinos                                     0.007429421            0.06329114
## Manrique Central No. 1                        0.015243902            0.06944444
## Manrique Central No. 2                        0.026737968            0.05319149
## Manrique Oriental                             0.009596929            0.05102041
## Media Luna                                    0.193548387            0.00000000
## Miraflores                                    0.014367816            0.00000000
## Miranda                                       0.014749263            0.03623188
## Moravia                                       0.015090543            0.04331683
## Naranjal                                      0.004377432            0.04566210
## Nueva Villa de Aburrá                         0.035211268            0.00000000
## Nuevos Conquistadores                         0.138888889            0.00000000
## Olaya Herrera                                 0.064102564            0.00000000
## Pablo VI                                      0.128205128            0.19230769
## Palermo                                       0.020491803            0.00000000
## Parque Juan Pablo II                          0.015151515            0.11904762
## Parque Norte                                  0.008741259            0.10948905
## Patio Bonito                                  0.005165289            0.00000000
## Pedregal                                      0.012658228            0.06369427
## Playón de Los Comuneros                       0.034246575            0.00000000
## Plaza de Ferias                               0.015723270            0.17241379
## Robledo                                       0.009276438            0.05882353
## Rosales                                       0.004087639            0.11363636
## San Bernardo                                  0.020080321            0.04201681
## San Germán                                    0.011061947            0.09803922
## San Isidro                                    0.014214641            0.04132231
## San Javier No.1                               0.011235955            0.04237288
## San Joaquín                                   0.008646779            0.08561644
## San Lucas                                     0.030864198            0.00000000
## San Miguel                                    0.013761468            0.07462687
## San Pedro                                     0.007704160            0.14367816
## Santa Cruz                                    0.026041667            0.05555556
## Santa Inés                                    0.024115756            0.03571429
## Santa Lucía                                   0.031645570            0.00000000
## Santa María de los Ángeles                    0.014836795            0.23809524
## Santa Mónica                                  0.020576132            0.25000000
## Santander                                     0.029940120            0.05208333
## Santo Domingo Savio No. 1                     0.027472527            0.03300330
## Sevilla                                       0.006929047            0.05859375
## Simón Bolívar                                 0.013661202            0.14814815
## Suburbano Altavista                           0.116279070            0.33333333
## Sucre                                         0.010752688            0.00000000
## Suramericana                                  0.006053269            0.06849315
## Tejelo                                        0.044642857            0.04672897
## Tenche                                        0.013605442            0.12820513
## Terminal de Transporte                        0.004665630            0.04516129
## Toscana                                       0.022435897            0.15306122
## Tricentenario                                 0.010638298            0.00000000
## Trinidad                                      0.005422993            0.04966887
## U.D. Atanasio Girardot                        0.018656716            0.00000000
## U.P.B.                                        0.017241379            0.00000000
## Universidad de Antioquia                      0.010893246            0.09803922
## Universidad Nacional                          0.004322767            0.06637168
## Veinte de Julio                               0.047468354            0.14285714
## Versalles No. 1                               0.022421525            0.03968254
## Villa Carlota                                 0.005592841            0.06756757
## Villa del Socorro                             0.020242915            0.10000000
## Villa Guadalupe                               0.029761905            0.04807692
## Villa Niza                                    0.104166667            0.21739130
## Villatina                                     0.023923445            0.00000000
##                                        grupo
## Alejandría                                 2
## Alejandro Echavarría                       2
## Alfonso López                              2
## Altavista                                  2
## Altavista Sector Central                   2
## Antonio Nariño                             2
## Aranjuez                                   2
## Area de Expansion Altos de Calasanz        2
## Área de Expansión Pajarito                 2
## Área de Expansión San Antonio de Prado     2
## Asomadera No. 1                            2
## B. Cerro  El Volador                       2
## Barrio Caicedo                             2
## Barrio Colombia                            2
## Barrio de Jesús                            2
## Belalcázar                                 2
## Belencito                                  2
## Berlin                                     2
## Betania                                    2
## Bolivariana                                2
## Bomboná No. 1                              2
## Bosques de San Pablo                       2
## Boston                                     2
## Brasilia                                   2
## Cabecera Urbana San Cristobal              2
## Calasanz                                   2
## Calle Nueva                                2
## Campo Alegre                               2
## Campo Valdés No. 1                         2
## Campo Valdés No. 2                         2
## Carlos E. Restrepo                         2
## Castropol                                  2
## Cataluña                                   2
## Centro Administrativo                      2
## Cerro Nutibara                             2
## Cuarta Brigada                             2
## Cucaracho                                  2
## Diego Echavarría                           2
## Doce de Octubre No.2                       2
## El Corazón                                 2
## El Danubio                                 2
## El Diamante                                2
## El Pinal                                   2
## El Poblado                                 2
## El Progreso No.2                           2
## El Rodeo                                   2
## El Salado                                  2
## El Salvador                                2
## El Tesoro                                  2
## El Velódromo                               2
## Enciso                                     2
## Estación Villa                             2
## Facultad de Minas U. Nacional              2
## Fátima                                     2
## Florida Nueva                              2
## Girardot                                   2
## Granada                                    2
## Granizal                                   2
## Guayabal                                   2
## Héctor Abad Gómez                          2
## Kennedy                                    2
## La Aguacatala                              2
## La Castellana                              2
## La Colina                                  2
## La Cruz                                    2
## La Esperanza                               2
## La Floresta                                2
## La Francia                                 2
## La Gloria                                  2
## La Isla                                    2
## La Libertad                                2
## La Milagrosa                               2
## La mota                                    2
## La Piñuela                                 2
## La Pradera                                 2
## La Rosa                                    2
## La Salle                                   2
## Las Acacias                                2
## Las Brisas                                 2
## Las Esmeraldas                             2
## Las Granjas                                2
## Las Palmas                                 2
## Las Violetas                               2
## Lorena                                     2
## Loreto                                     2
## Los Alcázares                              2
## Los Alpes                                  2
## Los Balsos No.1                            2
## Los Cerros El Vergel                       2
## Los Colores                                2
## Los Conquistadores                         2
## Los Mangos                                 2
## Los Pinos                                  2
## Manrique Central No. 1                     2
## Manrique Central No. 2                     2
## Manrique Oriental                          2
## Media Luna                                 2
## Miraflores                                 2
## Miranda                                    2
## Moravia                                    2
## Naranjal                                   2
## Nueva Villa de Aburrá                      2
## Nuevos Conquistadores                      2
## Olaya Herrera                              2
## Pablo VI                                   2
## Palermo                                    2
## Parque Juan Pablo II                       2
## Parque Norte                               2
## Patio Bonito                               2
## Pedregal                                   2
## Playón de Los Comuneros                    2
## Plaza de Ferias                            2
## Robledo                                    2
## Rosales                                    2
## San Bernardo                               2
## San Germán                                 2
## San Isidro                                 2
## San Javier No.1                            2
## San Joaquín                                2
## San Lucas                                  2
## San Miguel                                 2
## San Pedro                                  2
## Santa Cruz                                 2
## Santa Inés                                 2
## Santa Lucía                                2
## Santa María de los Ángeles                 2
## Santa Mónica                               2
## Santander                                  2
## Santo Domingo Savio No. 1                  2
## Sevilla                                    2
## Simón Bolívar                              2
## Suburbano Altavista                        2
## Sucre                                      2
## Suramericana                               2
## Tejelo                                     2
## Tenche                                     2
## Terminal de Transporte                     2
## Toscana                                    2
## Tricentenario                              2
## Trinidad                                   2
## U.D. Atanasio Girardot                     2
## U.P.B.                                     2
## Universidad de Antioquia                   2
## Universidad Nacional                       2
## Veinte de Julio                            2
## Versalles No. 1                            2
## Villa Carlota                              2
## Villa del Socorro                          2
## Villa Guadalupe                            2
## Villa Niza                                 2
## Villatina                                  2
## Cuarto grupo
barrios_mean2[barrios_mean2$grupo == 3,]
##                                          Atropello_HERIDO Choque_HERIDO
## Aures No. 2                                     15.000000     19.600000
## Aures No.1                                      14.400000     21.200000
## Barrio Cristóbal                                 2.200000      9.800000
## Bello Horizonte                                  8.600000     16.200000
## Bermejal-Los Alamos                              9.400000      8.400000
## Blanquizal                                       2.200000      2.500000
## Bomboná No. 2                                    7.200000     12.400000
## Boyacá                                          10.000000     21.200000
## Calasanz Parte Alta                              5.200000     25.200000
## Córdoba                                          9.800000     21.400000
## Doce de Octubre No.1                            22.800000     24.600000
## El Castillo                                      3.000000     12.200000
## El Compromiso                                    7.000000      6.400000
## El Estadio                                      15.800000     42.400000
## El Pomar                                        12.800000     22.200000
## El Progreso                                     18.800000     90.200000
## El Raizal                                       16.000000     15.800000
## El Rincón                                       18.800000     34.200000
## Facultad Veterinaria y Zootecnia U.de.A.         2.000000      5.800000
## Florencia                                        7.800000     16.000000
## Fuente Clara                                     2.600000      9.400000
## Jardín Botánico                                  4.600000      9.800000
## La Alpujarra                                     6.400000     38.400000
## La América                                      22.400000     47.000000
## La Florida                                       7.600000     30.400000
## La Palma                                         8.200000     24.000000
## La Pilarica                                     10.200000     49.600000
## Las Playas                                       4.600000     25.800000
## Loma de los Bernal                               5.800000     18.800000
## López de Mesa                                    4.400000      6.600000
## Los Ángeles                                     17.400000     64.600000
## María Cano Carambolas                            6.000000      1.600000
## Moscú No. 2                                     18.800000      8.200000
## Nueva Villa de la Iguaná                        10.400000     26.800000
## Oriente                                          2.800000      1.666667
## Pedregal Alto                                    2.666667      2.000000
## Picacho                                         28.200000     29.400000
## Piedras Blancas                                  8.400000      4.600000
## Popular                                         26.000000     11.800000
## San Javier No.2                                 11.400000      9.400000
## Santa Margarita                                  3.600000      9.000000
## Santo Domingo Savio No. 2                        6.600000      2.666667
## Suburbano La Loma                                4.800000     10.200000
## Villa Hermosa                                   19.200000     27.400000
##                                          Choque_SOLO DAÑOS Choque_MUERTO
## Aures No. 2                                      24.600000             0
## Aures No.1                                       20.000000             0
## Barrio Cristóbal                                 12.000000             0
## Bello Horizonte                                  20.200000             0
## Bermejal-Los Alamos                              11.800000             0
## Blanquizal                                        4.000000             0
## Bomboná No. 2                                    26.800000             0
## Boyacá                                           35.200000             0
## Calasanz Parte Alta                              45.000000             0
## Córdoba                                          32.000000             0
## Doce de Octubre No.1                             22.000000             0
## El Castillo                                      42.800000             0
## El Compromiso                                     6.400000             0
## El Estadio                                       84.800000             0
## El Pomar                                         15.800000             0
## El Progreso                                     156.200000             0
## El Raizal                                        20.600000             0
## El Rincón                                        78.400000             0
## Facultad Veterinaria y Zootecnia U.de.A.          8.000000             0
## Florencia                                        18.400000             0
## Fuente Clara                                      4.000000             0
## Jardín Botánico                                  24.600000             0
## La Alpujarra                                     96.000000             0
## La América                                      104.000000             0
## La Florida                                      128.000000             0
## La Palma                                         48.800000             0
## La Pilarica                                      82.200000             0
## Las Playas                                       38.800000             0
## Loma de los Bernal                               50.600000             0
## López de Mesa                                    12.200000             0
## Los Ángeles                                      89.400000             0
## María Cano Carambolas                             2.750000             0
## Moscú No. 2                                      10.600000             0
## Nueva Villa de la Iguaná                         35.200000             0
## Oriente                                           1.666667             0
## Pedregal Alto                                     3.250000             0
## Picacho                                          35.800000             0
## Piedras Blancas                                   6.200000             0
## Popular                                          21.400000             0
## San Javier No.2                                  18.600000             0
## Santa Margarita                                   8.600000             0
## Santo Domingo Savio No. 2                         2.800000             0
## Suburbano La Loma                                17.400000             0
## Villa Hermosa                                    29.000000             0
##                                          Atropello_MUERTO Tasa_Choque_HERIDO
## Aures No. 2                                      1.000000          0.4434389
## Aures No.1                                       1.000000          0.5145631
## Barrio Cristóbal                                 1.000000          0.4495413
## Bello Horizonte                                  1.000000          0.4450549
## Bermejal-Los Alamos                              1.500000          0.4158416
## Blanquizal                                       1.000000          0.4166667
## Bomboná No. 2                                    1.000000          0.3163265
## Boyacá                                           1.000000          0.3758865
## Calasanz Parte Alta                              1.000000          0.3589744
## Córdoba                                          1.000000          0.4007491
## Doce de Octubre No.1                             1.200000          0.5278970
## El Castillo                                      1.000000          0.2218182
## El Compromiso                                    1.000000          0.5000000
## El Estadio                                       1.000000          0.3333333
## El Pomar                                         1.000000          0.5842105
## El Progreso                                      1.000000          0.3660714
## El Raizal                                        1.000000          0.4340659
## El Rincón                                        1.000000          0.3037300
## Facultad Veterinaria y Zootecnia U.de.A.         1.000000          0.4202899
## Florencia                                        1.000000          0.4651163
## Fuente Clara                                     1.000000          0.7014925
## Jardín Botánico                                  1.500000          0.2848837
## La Alpujarra                                     1.333333          0.2857143
## La América                                       1.400000          0.3112583
## La Florida                                       1.000000          0.1919192
## La Palma                                         1.000000          0.3296703
## La Pilarica                                      1.000000          0.3763278
## Las Playas                                       1.000000          0.3993808
## Loma de los Bernal                               1.000000          0.2708934
## López de Mesa                                    1.000000          0.3510638
## Los Ángeles                                      1.000000          0.4194805
## María Cano Carambolas                            1.000000          0.4210526
## Moscú No. 2                                      1.000000          0.4361702
## Nueva Villa de la Iguaná                         1.000000          0.4322581
## Oriente                                          1.000000          0.6666667
## Pedregal Alto                                    1.000000          0.4347826
## Picacho                                          1.000000          0.4509202
## Piedras Blancas                                  1.000000          0.4259259
## Popular                                          1.000000          0.3554217
## San Javier No.2                                  1.000000          0.3357143
## Santa Margarita                                  1.000000          0.5113636
## Santo Domingo Savio No. 2                        1.000000          0.6060606
## Suburbano La Loma                                1.000000          0.3695652
## Villa Hermosa                                    1.000000          0.4858156
##                                          Tasa_Choque_MUERTO
## Aures No. 2                                               0
## Aures No.1                                                0
## Barrio Cristóbal                                          0
## Bello Horizonte                                           0
## Bermejal-Los Alamos                                       0
## Blanquizal                                                0
## Bomboná No. 2                                             0
## Boyacá                                                    0
## Calasanz Parte Alta                                       0
## Córdoba                                                   0
## Doce de Octubre No.1                                      0
## El Castillo                                               0
## El Compromiso                                             0
## El Estadio                                                0
## El Pomar                                                  0
## El Progreso                                               0
## El Raizal                                                 0
## El Rincón                                                 0
## Facultad Veterinaria y Zootecnia U.de.A.                  0
## Florencia                                                 0
## Fuente Clara                                              0
## Jardín Botánico                                           0
## La Alpujarra                                              0
## La América                                                0
## La Florida                                                0
## La Palma                                                  0
## La Pilarica                                               0
## Las Playas                                                0
## Loma de los Bernal                                        0
## López de Mesa                                             0
## Los Ángeles                                               0
## María Cano Carambolas                                     0
## Moscú No. 2                                               0
## Nueva Villa de la Iguaná                                  0
## Oriente                                                   0
## Pedregal Alto                                             0
## Picacho                                                   0
## Piedras Blancas                                           0
## Popular                                                   0
## San Javier No.2                                           0
## Santa Margarita                                           0
## Santo Domingo Savio No. 2                                 0
## Suburbano La Loma                                         0
## Villa Hermosa                                             0
##                                          Tasa_Atropello_MUERTO grupo
## Aures No. 2                                         0.06578947     3
## Aures No.1                                          0.06666667     3
## Barrio Cristóbal                                    0.41666667     3
## Bello Horizonte                                     0.11363636     3
## Bermejal-Los Alamos                                 0.15000000     3
## Blanquizal                                          0.41666667     3
## Bomboná No. 2                                       0.13513514     3
## Boyacá                                              0.09803922     3
## Calasanz Parte Alta                                 0.18518519     3
## Córdoba                                             0.09803922     3
## Doce de Octubre No.1                                0.05000000     3
## El Castillo                                         0.35714286     3
## El Compromiso                                       0.13513514     3
## El Estadio                                          0.06250000     3
## El Pomar                                            0.07692308     3
## El Progreso                                         0.05208333     3
## El Raizal                                           0.06024096     3
## El Rincón                                           0.05263158     3
## Facultad Veterinaria y Zootecnia U.de.A.            0.45454545     3
## Florencia                                           0.12500000     3
## Fuente Clara                                        0.35714286     3
## Jardín Botánico                                     0.28846154     3
## La Alpujarra                                        0.18518519     3
## La América                                          0.05882353     3
## La Florida                                          0.12820513     3
## La Palma                                            0.11627907     3
## La Pilarica                                         0.09615385     3
## Las Playas                                          0.20000000     3
## Loma de los Bernal                                  0.16666667     3
## López de Mesa                                       0.21739130     3
## Los Ángeles                                         0.05681818     3
## María Cano Carambolas                               0.16129032     3
## Moscú No. 2                                         0.05263158     3
## Nueva Villa de la Iguaná                            0.09433962     3
## Oriente                                             0.33333333     3
## Pedregal Alto                                       0.33333333     3
## Picacho                                             0.03496503     3
## Piedras Blancas                                     0.11627907     3
## Popular                                             0.03816794     3
## San Javier No.2                                     0.08620690     3
## Santa Margarita                                     0.26315789     3
## Santo Domingo Savio No. 2                           0.14285714     3
## Suburbano La Loma                                   0.17857143     3
## Villa Hermosa                                       0.05154639     3

Los grupos que tienen la etiqueta 1 y 2 parecen estar bien conformados. En ambos casos existen barrios con alta y baja accidentalidad, pero hay diferencias en las tasas de la gravedad originada por un accidente. El grupo con la etiqueta 3 son barrios con baja accidentalidad y bajas tasas en la gravedad del accidente. En este grupo incluiremos los datos provenientes del grupo 0 que tienen baja accidentalidad y baja tasa de gravedad.

Hemos identificado en el grupo 0 ciertos barrios que tienen bajos índices de accidentalidad y altas tasas de fatalidad, por lo que hemos decidido agrupar a todos aquellos barrios con menos de 50 accidentes en choque solo daños y donde alguno de sus tasas de fatalidad sea superior a 0.4.

barrios_mean2$grupo[barrios_mean2$grupo == 0 & (barrios_mean2$Tasa_Atropello_MUERTO > 0.4 | barrios_mean2$Tasa_Choque_MUERTO > 0.4)] <- 4
table(barrios_mean2$grupo)
## 
##   0   1   2   3   4 
##  22  82 151  44   9

Los que tienen baja accidentalidad y tasas de fatalidad promedio serán incluidos en el grupo 2.

barrios_mean2$grupo[barrios_mean2$grupo == 0 & barrios_mean2$`Choque_SOLO DAÑOS` < 50] <- 2
table(barrios_mean2$grupo)
## 
##   0   1   2   3   4 
##  20  82 153  44   9

Los otros 20 casos presentes en el grupo 0 son casos en los que la accidentalidad es muy alta en cuanto a choques o que el ratio de heridos o muertos por choque es muy alta para la cantidad de accidentes que se dan en ese barrio, por esta razón decidimos dejar esta configuración.

Ahora con estos grupos apróximadamente homógeneos, procedemos a asignar una etiqueta. Estas serán las etiquetas de acuerdo con sus características:

  • Grupo 0: Alta accidentalidad y alto ratio de accidentes con heridos o muertos.
  • Grupo 1: Baja o media accidentalidad pero sin fatalidades.
  • Grupo 2: Barrios con estadísticas promedio en cuanto tasas de fatalidad, heridos y ratio entre accidentes y personas heridas/muertas.
  • Grupo 3: Baja o media accidentalidad con alta tasa de heridos pero sin fatalidades en choques.
  • Grupo 4: Baja accidentalidad con alta tasa de fatalidad.

Acá nos referimos a ratio a la relación entre la cantidad de accidentes que no involucran heridos o muertos versus la cantidad de accidentes que involucran heridos o muertos.

De acuerdo a estas etiquetas procedemos a graficar el mapa y proseguir con el análisis pertinente.

barrios_mean2$etiqueta[barrios_mean2$grupo == 0] <- "Alta accidentalidad y ratio de heridos/muertos"
barrios_mean2$etiqueta[barrios_mean2$grupo == 1] <- "Baja o media accidentalidad, sin fatalidades"
barrios_mean2$etiqueta[barrios_mean2$grupo == 2] <- "Barrios con estadísticas promedio"
barrios_mean2$etiqueta[barrios_mean2$grupo == 3] <- "Baja o media accidentalidad, alta tasa de heridos"
barrios_mean2$etiqueta[barrios_mean2$grupo == 4] <- "Baja accidentalidad, alta tasa de fatalidad"
barrios_mean2$NOMBRE_BARRIO <- row.names(barrios_mean2)
accidentes_year <- accidentes %>%
  select(NOMBRE_BARRIO,PERIODO) %>%
  group_by(NOMBRE_BARRIO,PERIODO) %>%
  summarize(conteo = n())
## `summarise()` regrouping output by 'NOMBRE_BARRIO' (override with `.groups` argument)
accidentes_total <- accidentes_year %>%
  group_by(NOMBRE_BARRIO) %>%
  summarize(conteo_mean = mean(conteo))
## `summarise()` ungrouping output (override with `.groups` argument)
accidentes_total$conteo_mean <- round(accidentes_total$conteo_mean)
barrios_mean2 <- merge(barrios_mean2,accidentes_total,by="NOMBRE_BARRIO",all.x=TRUE)
barrios_mean2$tasa_fatal_med <- (barrios_mean2$Tasa_Choque_MUERTO + barrios_mean2$Tasa_Atropello_MUERTO)/2

Ahora procedemos a graficar el mapa.

## Copia del spatial data frame
barrios_med_mapa <- barrios_medellin

## Sacar index para organizar luego los registros
barrios_med_mapa@data$index <- as.integer(row.names(barrios_med_mapa@data))

## Combinar el indicador con el data frame spatial para graficar en mapa
barrios_med_mapa@data <- merge(barrios_med_mapa@data,barrios_mean2,by = "NOMBRE_BARRIO",all.x=TRUE)
barrios_med_mapa@data <- barrios_med_mapa@data %>% arrange(index)
barrios_med_mapa@data$grupo <- barrios_med_mapa@data$grupo + 1

Mapa

labels <- sprintf(
  "<strong>%s</strong><br/><strong>Grupo:</strong> <u>%s</u><br/><strong>%g</strong> accidentes promedio por año<br/><strong>%g</strong> accidentes que involucran heridos por año<br/><strong>%g</strong>&#37 de accidentes promedio con al menos un muerto",
  barrios_med_mapa@data$NOMBRE_BARRIO, 
  barrios_med_mapa@data$etiqueta, 
  barrios_med_mapa@data$conteo_mean, round(barrios_med_mapa@data$Atropello_HERIDO + barrios_med_mapa@data$Choque_HERIDO), round(barrios_med_mapa@data$tasa_fatal_med * 100,1)
) %>% lapply(htmltools::HTML)

pal <- colorFactor(palette = c("#04258C","#CEF8FA","#85D0F0","#305FC2","#9B90E1"), 
               levels = c("Alta accidentalidad y ratio de heridos/muertos", "Baja o media accidentalidad, sin fatalidades", "Barrios con estadísticas promedio",
                          "Baja o media accidentalidad, alta tasa de heridos","Baja accidentalidad, alta tasa de fatalidad"))

leaflet(barrios_med_mapa)%>% 
  addTiles()  %>% 
  setView(lat=6.247612, lng=-75.582932, zoom=11.5) %>%
  addPolygons(color="#B4B3B6",weight = 1, fillOpacity = 0.9,opacity = 1, smoothFactor = 0.7, fillColor = ~pal(etiqueta),
  highlight = highlightOptions(
    weight = 3,
    color = "#666",
    fillOpacity = 0.8,
    bringToFront = TRUE),
  label = labels,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "13px",
    direction = "auto")) %>% 
  addLegend(pal = pal, values = ~etiqueta, opacity = 0.7, title = "Grupo",
            position = "topright")

Con esta información y de acuerdo a las características de los grupos se definen los pasos a seguir.